Como Activity.finish () funciona no Android?

Respostas:

123

Ele sai imediatamente ou completa a função da qual foi chamado?

O método chamado finish()será executado até a conclusão. A finish()operação nem começará até você retornar o controle ao Android.

CommonsWare
fonte
3
Então, como terminar uma atividade que é chamada por StartAvtivityforResults () sem conclusão?
Ayush Pateria
@CommonsWare Como podemos garantir que onStop seja sempre chamado? No meu aplicativo OnStop e onDestroy não são chamados em alguns casos e nesses casos a atividade infantil demora muito para terminar e parece que o aplicativo travou ... Considerando que quando onStop é chamado tudo funciona normalmente. Estou no Galaxy y com Android 2.3.6 ... veja minha pergunta em stackoverflow.com/questions/13928591/… plz help !!!
Amit
@CommonsWare Eu testei senhor muito verdadeiro. + 1 para você Mas eu quero fazer uma pergunta que escrevi terminar () como uma primeira instrução em minha função, então ele está executando a função inteira e, em seguida, terminar () é chamado Como isso foi gerenciado.
Nikhil Agrawal
@NikhilAgrawal, você pode ter sua função de retorno logo após terminar () ser chamado.
antonio081014
O finish () também chama onPause () e onStop () antes de chamar onDestroy ()?
sr09
20

Cada evento do ciclo de vida como onCreate, onResume, onPause.... onDestroyde uma actividade é sempre chamado em um único segmento - A "thread principal".

Resumindo, este encadeamento é apoiado por uma Fila na qual todos os eventos de atividade são postados. Este thread pode executar todos esses eventos na ordem de inserção.

Se você estiver chamando finish()um dos callbacks do ciclo de vida como onCreate()... uma mensagem de "término" será adicionada a esta fila, mas o thread não está livre para escolher e executar a ação "terminar" até que o método atualmente em execução retorne, isto é, o thread é liberado de tarefa atual.

user3688593
fonte
13

ondestroy() é a última chamada que você recebe antes que sua atividade seja destruída.

Isso pode acontecer porque a atividade está sendo concluída (alguém a chamou finish() ou porque o sistema está destruindo temporariamente esta instância da atividade para economizar espaço. Você pode distinguir entre esses dois cenários com o isFinishing() método.

user284295
fonte
1

Se houver duas atividades A e B. E seu fluxo está indo de A> B; e B = A chama finish().

Então,

O método de onde você chamou finish()será executado conforme Mark mencionou. E o fluxo de retornos de chamada será o seguinte -

  1. onPause() do activity A
  2. onRestart()> onStart()> onResume()Da Atividade B
  3. Então, vem a verdadeira diferença. Se você não ligou finish()de activity A; apenas onStop()de Activity Aserá chamado aqui. Embora, neste caso, em que chamou finish()de Activity A; Assim onStop()e onDestroy()ambos serão necessários activity A.
Darpan
fonte