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.
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 A
onRestart()> onStart()> onResume()Da Atividade B
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.
Respostas:
O método chamado
finish()
será executado até a conclusão. Afinish()
operação nem começará até você retornar o controle ao Android.fonte
Cada evento do ciclo de vida como
onCreate
,onResume
,onPause
....onDestroy
de 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 comoonCreate()
... 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.fonte
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 oisFinishing()
método.fonte
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()
doactivity A
onRestart()
>onStart()
>onResume()
Da Atividade Bfinish()
deactivity A
; apenasonStop()
deActivity A
será chamado aqui. Embora, neste caso, em que chamoufinish()
deActivity A
; AssimonStop()
eonDestroy()
ambos serão necessáriosactivity A
.fonte