O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Gerenciar mudanças de estado da atividade

Eventos diferentes, alguns acionados pelo usuário e outros pelo sistema, podem fazer com que um Activity faça a transição de um estado para outro. Este documento descreve alguns casos comuns em que essas transições ocorrem e como lidar com elas.

Para mais informações sobre os estados de atividade, consulte Entenda o ciclo de vida da atividade. Para saber como a classe ViewModel pode ajudar você a gerenciar o ciclo de vida das atividades, consulte Entenda a classe ViewModel.

Ocorre uma mudança na configuração

Há vários eventos que podem acionar uma mudança de configuração. Talvez o exemplo mais proeminente seja uma mudança entre as orientações retrato e paisagem. Outros casos que podem causar mudanças na configuração incluem mudanças no idioma ou no dispositivo de entrada.

Quando ocorre uma mudança na configuração, a atividade é destruída e recriada. A instância da atividade original terá os callbacks onPause(), onStop() e onDestroy() acionados. Uma nova instância da atividade será criada e terá os callbacks onCreate(), onStart() e onResume() acionados.

Use uma combinação de ViewModels, o método onSaveInstanceState() e/ou armazenamento local persistente para preservar o estado da IU de uma atividade nas mudanças de configuração. Decidir como combinar essas opções depende da complexidade dos dados de IU, casos de uso do app e consideração da velocidade de recuperação em comparação com o uso de memória. Para mais informações sobre como salvar o estado da sua IU de atividades, consulte Como salvar os estados da IU.

Como gerenciar casos de várias janelas

Quando um app entra no modo de várias janelas, disponível no Android 7.0 (API de nível 24) ou posterior, o sistema notifica a atividade em execução de uma mudança de configuração, passando pelas transições de ciclo de vida descritas acima. Esse comportamento também ocorrerá se um app que já está no modo de várias janelas for redimensionado. Sua atividade pode gerenciar a mudança de configuração por conta própria ou permitir que o sistema destrua a atividade e a recrie com as novas dimensões.

Para mais informações sobre o ciclo de vida de várias janelas, consulte a seção Ciclo de vida do modo Várias janelas da página Compatibilidade com Várias janelas.

No modo de várias janelas, embora haja dois apps visíveis para o usuário, apenas aquele com o qual o usuário está interagindo fica em primeiro plano e focalizado. Essa atividade está no estado "Retomado", enquanto o app na outra janela está no estado "Pausado".

Quando o usuário alterna do app A para o B, o sistema chama onPause() no app A e onResume() no app B. Ele alterna entre esses dois métodos sempre que o usuário alterna entre os apps.

Para ver mais detalhes sobre o modo de várias janelas, consulte Compatibilidade com Várias janelas.

A atividade ou a caixa de diálogo é exibida em primeiro plano

Se uma nova atividade ou caixa de diálogo aparecer em primeiro plano, assumindo o foco e encobrindo parcialmente a atividade em andamento, a atividade oculta perderá o foco e entrará no estado "Pausado". Em seguida, o sistema chamará onPause().

Quando a atividade encoberta retorna para o primeiro plano e recupera o foco, ela chama onResume().

Se uma nova atividade ou caixa de diálogo aparecer em primeiro plano, com foco e encobrindo completamente a atividade em andamento, a atividade encoberta perderá o foco e entrará no estado "Parado". Em seguida, o sistema, em rápida sucessão, chamará onPause() e onStop().

Quando a mesma instância da atividade encoberta voltar para o primeiro plano, o sistema chamará onRestart(), onStart() e onResume() na atividade. Se for uma nova instância da atividade encoberta que chega ao segundo plano, o sistema não chamará onRestart(), chamando apenas onStart() e onResume().

Observação: quando o usuário toca no botão "Visão geral" ou home, o sistema se comporta como se a atividade atual estivesse completamente encoberta.

O usuário toca no botão "Voltar"

Se uma atividade estiver em primeiro plano e o usuário tocar no botão Voltar, a atividade fará a transição pelos callbacks onPause(), onStop() e onDestroy(). Além de ser destruída, a atividade também será removida da pilha de retorno.

É importante observar que, por padrão, o callback onSaveInstanceState() não é acionado nesse caso. Esse comportamento é baseado na suposição de que o usuário tocou no botão Voltar sem a expectativa de retornar à mesma instância da atividade. No entanto, é possível modificar o método onBackPressed() para implementar algum comportamento personalizado, por exemplo, uma caixa de diálogo “confirmar-sair”.

Se você modificar o método onBackPressed(), é altamente recomendável invocar super.onBackPressed() a partir do método modificado. Caso contrário, o comportamento do botão Voltar pode ser desagradável para o usuário.

O sistema elimina o processo do app

Se um app estiver em segundo plano e o sistema precisar liberar mais memória para um app em primeiro plano, o app em segundo plano poderá ser eliminado pelo sistema para liberar memória. Para saber mais sobre como o sistema decide quais processos destruir, leia Estado de atividade e expulsão da memória e Processos e ciclo de vida de um app.

Para saber como salvar o estado da IU da atividade quando o sistema eliminar o processo do app, consulte Como salvar e restaurar o estado da atividade.