Подтвердить что ты не робот

Как работает Activity.finish() в Android?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Тогда

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

  • onPause() of activity A
  • onRestart() > onStart() > onResume() активности B
  • Затем возникает реальная разница. Если вы не вызывали finish() из activity A; здесь будет вызываться только onStop() of activity A. Хотя в этом случае мы вызывали finish() из activity A; Итак, onStop() и onDestroy() оба будут вызваны для activity A.