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

108

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

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

rantravee
источник

Ответы:

123

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

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

CommonsWare
источник
3
Тогда как завершить действие, которое вызывается StartAvtivityforResults () без завершения?
Ayush Pateria
@CommonsWare Как обеспечить постоянный вызов onStop? В моем приложении OnStop и onDestroy в некоторых случаях не вызываются, и в этих случаях дочерняя активность занимает слишком много времени для завершения, и это выглядит так, как будто приложение зависло ... Тогда как при вызове onStop все работает нормально. Я использую Galaxy y с Android 2.3.6 ... см. Мой вопрос на stackoverflow.com/questions/13928591/…, пожалуйста, помогите !!!
Амит
@CommonsWare Я проверил, сэр, очень верно. +1 для вас Но я хочу задать один вопрос. Я написал finish () в качестве первого оператора в моей функции, тогда он выполняет всю функцию, а затем вызывается finish () Как это удалось.
Nikhil Agrawal
@NikhilAgrawal, вы можете вернуть функцию сразу после вызова finish ().
antonio081014
Вызывает ли finish () также onPause () и onStop () перед вызовом onDestroy ()?
sr09
20

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

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

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

user3688593
источник
13

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

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

user284295
источник
1

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

Затем,

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

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