Respostas:
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.
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.
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.
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 -
onPause() do activity AonRestart()> onStart()> onResume()Da Atividade Bfinish()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.