1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
page.title=Pausando e reiniciando uma atividade
page.tags=ciclo de vida da atividade
helpoutsWidget=true
trainingnavtop=true
@jd:body
<div id="tb-wrapper">
<div id="tb">
<h2>Esta lição ensina a</h2>
<ol>
<li><a href="#Pause">Pausar sua atividade</a></li>
<li><a href="#Resume">Reiniciar sua atividade</a></li>
</ol>
<h2>Leia também</h2>
<ul>
<li><a href="{@docRoot}guide/components/activities.html">Atividades</a>
</li>
</ul>
<h2>Tente</h2>
<div class="download-box">
<a href="http://developer.android.com/shareables/training/ActivityLifecycle.zip" class="button">Baixar a demonstração</a>
<p class="filename">ActivityLifecycle.zip</p>
</div>
</div>
</div>
<p>Durante o uso normal do aplicativo, a atividade em primeiro plano as vezes é obstruída por outros
componentes visuais que causam a <em>pausa</em>. Por exemplo, quando uma atividade
semitransparente é aberta (como uma no estilo de um diálogo), a atividade anterior pausa. Enquanto a
atividade estiver parcialmente visível, mas não for o foco da atividade, ela permanecerá pausada.</p>
<p>No entanto, se a atividade estiver completamente obstruída e não visível, ela <em>para</em> (o que será
discutido na próxima lição).</p>
<p>Conforme a atividade entra no estado pausado, o sistema chama o método {@link
android.app.Activity#onPause onPause()} em seu {@link android.app.Activity}, que permite
interromper ações em andamento que não devem continuar enquanto pausadas (como um vídeo) nem persistir
quaisquer informações que devam ser permanentemente salvas caso o usuário continue a sair do aplicativo. Se
o usuário retornar à atividade do estado de pausa, o sistema a reiniciará e chamará o método
{@link android.app.Activity#onResume onResume()}.</p>
<p class="note"><strong>Observação:</strong> quando a atividade receber o chamado para {@link
android.app.Activity#onPause()}, pode ser um indicativo de que a atividade será pausada por um
momento e o usuário poderá retornar o foco para a atividade. No entanto, geralmente é um indicativo
de que o usuário está saindo da atividade.</p>
<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
<p class="img-caption"><strong>Figura 1.</strong> Quando uma atividade semitransparente obscurece
sua atividade, o sistema chama {@link android.app.Activity#onPause onPause()} e a atividade
aguarda no estado Pausa (1). Se o usuário retornar à atividade enquanto ainda estiver pausada, o
sistema chama {@link android.app.Activity#onResume onResume()} (2).</p>
<h2 id="Pause">Pausar sua atividade</h2>
<p>Quando o sistema chama {@link android.app.Activity#onPause()} para sua atividade, teoricamente
significa que a atividade ainda está parcialmente visível, mas geralmente é um indício
de que o usuário está saindo da atividade e logo entrará em estado Interrompido. Use
o retorno de chamada {@link android.app.Activity#onPause()} para:</p>
<ul>
<li>Interromper animações ou outras ações em andamento que consomem a CPU.</li>
<li>Consolidar alterações não salvas apenas se o usuário esperar que essas alterações sejam permanentemente salvas ao
saírem (como um rascunho de email).</li>
<li>Liberar recursos do sistema, como receptores, cabos para sensores (como
GPS), ou outros recursos que podem afetar a vida da bateria enquanto a atividade estiver pausada e o usuário
não precisar deles.</li>
</ul>
<p>Por exemplo, se seu aplicativo utiliza o {@link android.hardware.Camera}, o método
{@link android.app.Activity#onPause()} é um bom local para liberá-los.</p>
<pre>
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
// Release the Camera because we don't need it when paused
// and other activities might need to use it.
if (mCamera != null) {
mCamera.release()
mCamera = null;
}
}
</pre>
<p>Geralmente, recomenda-se <strong>não</strong> utilizar {@link android.app.Activity#onPause()} para armazenar
alterações do usuário (como informações pessoais digitadas em um formulário) para armazenamento permanente. O único momento
que se deve persistir na mudança do usuário para armazenamento permanente dentro do {@link android.app.Activity#onPause()}
é quando tem certeza de que o usuário espera que as alterações sejam salvas automaticamente (como ao esboçar um email).
No entanto, evite executar trabalhos de uso intensivo da CPU durante {@link
android.app.Activity#onPause()}, como gravar em um banco de dados, porque isso pode retardar a transição
visível para a próxima atividade (execute operações de encerramento pesadas durante
{@link android.app.Activity#onStop onStop()}).</p>
<p>Simplifique a quantidade de operações feitas no método {@link android.app.Activity#onPause
onPause()} para permitir uma transição mais rápida para o próximo
destino do usuário se a atividade for realmente interrompida.</p>
<p class="note"><strong>Observação:</strong> quando a atividade está pausada, a instância {@link
android.app.Activity} é mantida na memória e chamada novamente quando a atividade é retomada.
Não é necessário reiniciar componentes que foram criados durante qualquer método de retorno de chamada que
leve ao estado Reiniciado.</p>
<h2 id="Resume">Reiniciar sua atividade</h2>
<p>Quando o usuário reinicia a atividade do estado Pausado, o sistema chama o método {@link
android.app.Activity#onResume()}.</p>
<p>Certifique-se de que o sistema chama esse método sempre que a atividade entrar no primeiro plano,
mesmo quando estiver sendo criada. Dessa forma, implemente o {@link
android.app.Activity#onResume()} para inicializar os componentes liberados durante {@link
android.app.Activity#onPause()} e execute quaisquer outras inicializações que devem ocorrer sempre que a
atividade entrar em estado Reiniciado (como ao iniciar animações e componentes de inicialização usados apenas
enquanto a atividade tiver o foco do usuário).</p>
<p>O seguinte exemplo de {@link android.app.Activity#onResume()} é uma contrapartida ao
exemplo {@link android.app.Activity#onPause()} acima. Portanto, ele inicializa a câmera que é
liberada quando a atividade entra em pausa.</p>
<pre>
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
// Get the Camera instance as the activity achieves full user focus
if (mCamera == null) {
initializeCamera(); // Local method to handle camera init
}
}
</pre>
|