Confusão do ciclo de vida da atividade
-
27-10-2019 - |
Pergunta
O ciclo de vida de uma atividade está documentado em muitos lugares, mas não consegui encontrar o que preciso. Essa é minha atividade, ela tem um construtor e o método onCreate. No meu projeto também tenho um registro nesses métodos e toda vez que vou de retrato para paisagem vejo que os dois métodos são executados. Por que meu construtor é chamado? não é a atividade na pilha e a instância da minha atividade está na memória, portanto, quando a alteração da configuração ocorrer, apenas o oncreate e on holdingistancestate devem acontecer (é claro, o onResume). Por que o construtor é sempre chamado, quem está chamando? É toda vez que algo é alterado na configuração, os dois métodos são chamados (um após o outro, nesta mesma sequência).
public TestActivity()
{
super(R.menu.main_menu, tag);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
Eu estava brincando com meu aplicativo de amostra, mas quero saber mais detalhes, alguém pode me esclarecer o cenário quando o construtor está incluído? Eu encontrei uma grande quantidade de documentação sobre o ciclo de vida, mas nenhuma explica os detalhes quando o construtor é incluído
Edit1: Eu li em alguns lugares que há uma pilha em que as atividades são colocadas para que da próxima vez elas sejam ativadas e rodando mais rápido, mas e quando a configuração for alterada? É necessário chamar o construtor e os métodos oncreate?
Solução
Conseqüentemente, não há razão para o construtor invocar a atividade a menos que você tenha o construtor com params (onCreate invoca para nós de qualquer maneira ...).No entanto, basicamente, parece uma coisa do java onCreate, provavelmente chamando o construtor padrão de atividades que é
public ActivityName(){} // This might get call because onCreate somewhere under the hood invoking Activity :)
Tente a mesma coisa com o construtor com parâmetros como
public ActivityName(String s){}// This wouldn't be call unless you explicitly call it.
Espero que isso ajude,
No entanto, esperaria por uma resposta de mais especialista :)
Edit: Então, quando você gira seu telefone, que chama onCreate, pois será criado novamente e onCreate provavelmente chama o construtor padrão para invocar a instância de sua atividade:) ... Esqueci de mencionar isso antes.
Outras dicas
Na rotação, sua atividade será reiniciada completa.Você pode evitar isso com android:configChanges="keyboardHidden| orientation"
em seu manifesto.
Como @rekire respondeu, a atividade é reiniciada na rotação da tela.Aqui, reiniciar significa que o framework cria outra instância da atividade, é por isso que o construtor de sua classe de atividade é chamado e, em seguida, o onCreate ().A nova instância de atividade substitui a antiga que será finalmente reciclada por GC, se sua referência não for mantida por outros.
Se desejar evitar o reinício da atividade na rotação da tela, leia esta pergunta .
Desenhei um diagrama UML para descrever o ciclo de vida da atividade do Android .