page.title=Pausando e reiniciando uma atividade page.tags=ciclo de vida da atividade helpoutsWidget=true trainingnavtop=true @jd:body

Esta lição ensina a

  1. Pausar sua atividade
  2. Reiniciar sua atividade

Leia também

Tente

Baixar a demonstração

ActivityLifecycle.zip

Durante o uso normal do aplicativo, a atividade em primeiro plano as vezes é obstruída por outros componentes visuais que causam a pausa. 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.

No entanto, se a atividade estiver completamente obstruída e não visível, ela para (o que será discutido na próxima lição).

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()}.

Observação: 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.

Figura 1. 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).

Pausar sua atividade

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:

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.

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

Geralmente, recomenda-se não 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()}).

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.

Observação: 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.

Reiniciar sua atividade

Quando o usuário reinicia a atividade do estado Pausado, o sistema chama o método {@link android.app.Activity#onResume()}.

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).

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.

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