Как Activity.finish () работает в Android? - PullRequest
103 голосов
/ 07 апреля 2010

Может ли кто-нибудь предоставить описание того, что происходит, когда Activity вызывает свой метод finish()?

Выходит ли он немедленно или завершает функцию, из которой он был вызван?

Ответы [ 4 ]

117 голосов
/ 07 апреля 2010

Выходится немедленно или завершается функция, из которой он был вызван

Метод, вызвавший finish(), будет выполнен до конца. Операция finish() даже не начнется, пока вы не вернете управление Android.

17 голосов
/ 01 января 2015

Каждое событие жизненного цикла, такое как onCreate, onResume, onPause .... onDestroy Действия, всегда вызывается в одном потоке - "Основной поток".

ВЕсли коротко, эта ветка поддерживается очередью, в которую публикуются все события активности.Этот поток может выполнять все эти события в порядке вставки.

Если вы вызываете finish() в одном из обратных вызовов жизненного цикла, таких как onCreate() ... к этому будет добавлено сообщение "финиш"очередь, но поток не может выбирать и выполнять действие «завершить», пока не вернется выполняемый в данный момент метод, т. е. поток освобождается от текущей задачи.

13 голосов
/ 07 апреля 2010

ondestroy() - последний звонок, который вы получите до того, как ваша деятельность будет уничтожена.

Это может произойти либо из-за того, что действие заканчивается (кто-то назвал finish() на нем, либо из-за того, что система временно уничтожает этот экземпляр действия для экономии места. Вы можете различить эти два сценария с помощью метода isFinishing() .

1 голос
/ 31 июля 2014

Если есть два вида деятельности A и B. И ваш поток идет от A> B; и B = A вызывает finish().

Тогда

Метод, из которого вы вызвали finish(), будет выполняться, как указано Марком. И поток обратных вызовов будет следующим:

  1. onPause() из activity A
  2. onRestart()> onStart()> onResume() Деятельности B
  3. Затем наступает настоящая разница. Если вы не звоните finish() с activity A; здесь будет вызываться только onStop() из Activity A. Хотя, в данном случае, куда мы звонили finish() из Activity A; Так что onStop() и onDestroy() оба будут вызваны для activity A.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...