Кто-нибудь может предоставить описание того, что происходит, когда Activity вызывает свой finish() метод?
Он завершается немедленно или завершает функцию, из которой был вызван?
Переведено автоматически
Ответ 1
Он завершает работу немедленно или завершает функцию, из которой был вызван ?
Вызванный метод finish() будет выполняться до завершения. finish() Операция даже не начнется, пока вы не вернете управление Android.
Ответ 2
Каждое событие жизненного цикла, такое как onCreate, onResume, onPause.... onDestroy Activity всегда вызывается в одном потоке - "Главном потоке".
Короче говоря, этот поток поддерживается очередью, в которую отправляются все события activity. Этот поток может выполнять все эти события в порядке вставки.
Если вы вызываете finish() в одном из обратных вызовов жизненного цикла, например, onCreate() ... в эту очередь будет добавлено сообщение "готово", но поток не может свободно выбирать и выполнять действие "готово", пока не вернется выполняемый в данный момент метод, т. е. Поток освобождается от текущей задачи.
Ответ 3
ondestroy() это последний вызов, который вы получаете перед тем, как ваша activity будет уничтожена.
Это может произойти либо потому, что действие завершается (кто-то вызвал finish() его), либо потому, что система временно уничтожает этот экземпляр activity для экономии места. Вы можете провести различие между этими двумя сценариями с помощью isFinishing() метода.
Ответ 4
Если есть два действия A и B. И ваш поток идет из A > B; и B = A вызывает finish().
Тогда,
Метод, из которого вы вызвали finish(), будет выполняться, как упоминал Марк. И поток обратных вызовов будет следующим -
onPause() из activity A
onRestart() > onStart() > onResume() о Activity B
Тогда возникает реальная разница. Если вы не вызывали finish() from activity A; здесь будет вызван только onStop() of Activity A. While, в данном случае, where мы вызвали finish() from Activity A; Поэтому onStop() и onDestroy() оба будут вызваны для activity A.