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