Odpowiedzi:
Czy kończy się natychmiast, czy kończy funkcję, z której został wywołany?
Wywołana metoda finish()
zostanie zakończona. finish()
Operacja nie będzie nawet zacząć, aż wrócisz do kontroli Androida.
Każde zdarzenie cykl życia jak onCreate
, onResume
, onPause
....onDestroy
z działalności jest zawsze nazywany na jednym wątku - „głównym wątku”.
Krótko mówiąc, ten wątek jest wspierany przez kolejkę, do której wysyłane są wszystkie zdarzenia dotyczące aktywności. Ten wątek może wykonywać wszystkie te zdarzenia w kolejności wstawiania.
Jeśli wywołujesz finish()
jedną z wywołań zwrotnych cyklu życia, takich jak onCreate()
... wiadomość "koniec" zostanie dodana do tej kolejki, ale wątek nie może wybrać i wykonać akcji "zakończ", dopóki aktualnie wykonywana metoda nie zwróci, tj. Wątek zostanie zwolniony aktualne zadanie.
ondestroy()
to ostatnie wezwanie, które otrzymujesz, zanim Twoja działalność zostanie zniszczona.
Może się tak zdarzyć, gdy czynność się kończy (ktoś ją wezwał finish()
, lub ponieważ system tymczasowo niszczy tę instancję czynności, aby zaoszczędzić miejsce). Możesz rozróżnić te dwa scenariusze za pomocą isFinishing()
metody.
Jeśli są dwa działania A i B. A twój przepływ przebiega od A> B; i B = A wzywa finish()
.
Następnie,
Metoda, z której wywołałeś, finish()
zostanie wykonana, jak wspomniał Mark. A przepływ wywołań zwrotnych będzie następujący -
onPause()
z activity A
onRestart()
> onStart()
> onResume()
Aktywności Bfinish()
z activity A
; tylko onStop()
z Activity A
zostanie wezwanych tutaj. Chociaż w tym przypadku, gdzie nazwaliśmy finish()
z Activity A
; Tak więc onStop()
i onDestroy()
obie będą wezwane activity A
.