Відповіді:
Чи виходить він негайно або виконує функцію, від якої він був викликаний?
Метод, який викликав finish()
, запуститься до завершення. finish()
Операція не буде навіть починати , поки не повертає керування Android.
Кожна подія життєвого циклу , як onCreate
, onResume
, onPause
....onDestroy
з діяльності завжди викликаються в одному потоці - «головна нитка».
Коротше кажучи, цей потік підтримується чергою, в яку публікуються всі події активності. Цей потік може виконати всі ці події в порядку вставки.
Якщо ви зателефонували finish()
в один із зворотних викликів життєвого циклу, наприклад onCreate()
... до цієї черги буде додано повідомлення про "закінчення", але потік не вільний для вибору та виконання дії "закінчення", поки не повернеться поточний метод виконання, тобто потока не буде звільнена від поточне завдання.
ondestroy()
- це заключний дзвінок, який ви отримуєте до знищення вашої діяльності.
Це може статися або через те, що діяльність закінчується (хтось зателефонував finish()
на неї, або через те, що система тимчасово знищує цей екземпляр діяльності для економії місця. Ви можете розрізнити ці два сценарії isFinishing()
методом.
Якщо є дві дії A і B. І ваш потік йде від A> B; і B = A дзвінкиfinish()
.
Тоді,
Метод, з якого ви зателефонували, finish()
буде виконуватися як згаданий Марк. А потік зворотних викликів буде наступним -
onPause()
з activity A
onRestart()
> onStart()
>onResume()
АКТИВНОСТІ Вfinish()
з activity A
; тільки onStop()
з Activity A
називатиметься тут. Хоча, в даному випадку, коли ми назвали finish()
з Activity A
; Так onStop()
і onDestroy()
обидва будуть закликані activity A
.