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@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@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