Як працює Activity.finish () в Android?


Відповіді:


123

Чи виходить він негайно або виконує функцію, від якої він був викликаний?

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


3
Тоді як закінчити діяльність, яку викликає StartAvtivityforResults () без завершення?
Айуш Патерія

@CommonsWare Як ми можемо гарантувати, що onStop викликається завжди? У моєму додатку OnStop та onDestroy в деяких випадках не викликаються, і в тих випадках дитяча діяльність займає занадто багато часу на доробку, і це виглядає так, що додаток повісився ... В той час, коли OnStop називається, все працює нормально. Я на Galaxy y з Android 2.3.6 ... дивіться моє запитання на stackoverflow.com/questions/13928591/… plz help !!!
Аміт

@CommonsОбережно, я перевірив, що сер дуже правдивий. + 1 для вас. Але я хочу задати одне питання, яке я написав закінчення () як перше твердження у своїй функції, тоді воно виконує всю функцію, а потім закінчити () називається Як це вдалося.
Nikhil Agrawal

@NikhilAgrawal, ви можете повернути свою функцію відразу після виклику закінчення ().
antonio081014

Чи завершує () також дзвінки onPause () та onStop () перед викликом onDestroy ()?
sr09

20

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

Коротше кажучи, цей потік підтримується чергою, в яку публікуються всі події активності. Цей потік може виконати всі ці події в порядку вставки.

Якщо ви зателефонували finish()в один із зворотних викликів життєвого циклу, наприклад onCreate()... до цієї черги буде додано повідомлення про "закінчення", але потік не вільний для вибору та виконання дії "закінчення", поки не повернеться поточний метод виконання, тобто потока не буде звільнена від поточне завдання.


13

ondestroy() - це заключний дзвінок, який ви отримуєте до знищення вашої діяльності.

Це може статися або через те, що діяльність закінчується (хтось зателефонував finish() на неї, або через те, що система тимчасово знищує цей екземпляр діяльності для економії місця. Ви можете розрізнити ці два сценарії isFinishing() методом.


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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.