Jak działa Activity.finish () w systemie Android?


Odpowiedzi:


123

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.


3
Jak więc zakończyć działanie wywoływane przez StartAvtivityforResults () bez zakończenia?
Ayush Pateria

@CommonsWare Jak możemy zapewnić, że onStop jest zawsze wywoływany? W mojej aplikacji OnStop i onDestroy nie są wywoływane w niektórych przypadkach iw takich przypadkach działanie podrzędne zajmuje zbyt dużo czasu na zakończenie i wygląda na to, że aplikacja zawiesiła się ... Podczas gdy gdy nazywa się onStop, wszystko działa normalnie. Jestem na Galaxy y z Androidem 2.3.6 ... zobacz moje pytanie na stackoverflow.com/questions/13928591/ ... plz help !!!
Amit

@CommonsWare Przetestowałem, panie, bardzo prawdziwe. + 1 dla ciebie Ale chcę zadać jedno pytanie, które napisałem finish () jako pierwszą instrukcję w mojej funkcji, a następnie wykonuje całą funkcję, a następnie finish () nazywa się Jak to zarządzono.
Nikhil Agrawal

@NikhilAgrawal, możesz mieć funkcję powrotu zaraz po wywołaniu metody finish ().
antonio081014

Czy finish () również wywołuje onPause () i onStop () przed wywołaniem onDestroy ()?
sr09

20

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.


13

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.


1

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 -

  1. onPause() z activity A
  2. onRestart()> onStart()> onResume()Aktywności B
  3. Potem pojawia się prawdziwa różnica. Jeśli nie dzwoniłeś finish()z activity A; tylko onStop()z Activity Azostanie 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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.