Jaki jest cykl życia działania Androida? Dlaczego tak wiele podobnych metod brzmiące ( onCreate()
, onStart()
, onResume()
) o nazwie podczas inicjalizacji i wielu innych ( onPause()
, onStop()
, onDestroy()
) o nazwie na końcu?
Kiedy wywoływane są te metody i jak należy je właściwie stosować?
Odpowiedzi:
Zobacz to w cyklu życia aktywności (w Android Developers).
onCreate () :
onRestart () :
onStart () :
onResume () :
onPause () :
onStop () :
onDestroy () :
Przy pierwszym ładowaniu działania zdarzenia są wywoływane w następujący sposób:
Po kliknięciu przycisku Telefon aktywność przechodzi w tło i wywoływane są następujące zdarzenia:
Wyjdź z telefonu, a wywołane zostaną poniższe zdarzenia:
Po kliknięciu przycisku Wstecz LUB próby zakończenia () działania zdarzenia są wywoływane w następujący sposób:
Stany aktywności
System operacyjny Android korzysta z kolejki priorytetowej, aby pomóc w zarządzaniu działaniami uruchomionymi na urządzeniu. W zależności od stanu, w którym znajduje się określona aktywność Androida, zostanie przypisany określony priorytet w systemie operacyjnym. Ten priorytetowy system pomaga Androidowi zidentyfikować nieużywane działania, umożliwiając systemowi operacyjnemu odzyskanie pamięci i zasobów. Poniższy diagram ilustruje stany, przez które może przejść aktywność w trakcie jej trwania:
Stany te można podzielić na trzy główne grupy w następujący sposób:
Aktywne lub uruchomione - działania są uważane za aktywne lub uruchomione, jeśli znajdują się na pierwszym planie, znane również jako szczyt stosu działań. Jest to uważane za działanie o najwyższym priorytecie na stosie działań Androida i jako takie zostanie zabite przez system operacyjny tylko w ekstremalnych sytuacjach, na przykład gdy działanie będzie próbowało zużywać więcej pamięci niż jest dostępne na urządzeniu, ponieważ może to spowodować, że interfejs użytkownika przestać reagować.
Wstrzymane - gdy urządzenie przechodzi w tryb uśpienia lub aktywność jest nadal widoczna, ale częściowo ukryta przez nową, niedokończoną lub przezroczystą aktywność, uznaje się ją za wstrzymaną. Wstrzymane działania są nadal aktywne, to znaczy zachowują wszystkie informacje o stanie i członkach oraz pozostają podłączone do menedżera okien. Jest to uważane za drugie działanie o najwyższym priorytecie w stosie Aktywności Androida i jako takie zostanie zabite przez system operacyjny tylko wtedy, gdy zabicie tego działania spełni wymagania dotyczące zasobów potrzebne do utrzymania stabilności i działania Aktywnej / Działającej Aktywności.
Zatrzymane - działania całkowicie zasłonięte przez inne działanie są uważane za zatrzymane lub w tle. Zatrzymane działania nadal próbują zachować swój stan i informacje o członkach tak długo, jak to możliwe, ale zatrzymane działania są uważane za najniższy priorytet trzech stanów i jako taki system operacyjny najpierw zabije działania w tym stanie, aby spełnić wymagania dotyczące zasobów działań o wyższym priorytecie.
* Przykładowa aktywność w celu zrozumienia cyklu życia **
źródło
Aktywność ma sześć stanów
Cykl życia aktywności obejmuje siedem metod
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
Sytuacje
Po otwarciu aplikacji
Po naciśnięciu przycisku Wstecz i wyjściu z aplikacji
Po naciśnięciu przycisku Home
Po naciśnięciu przycisku Home po ponownym otwarciu aplikacji z listy ostatnich zadań lub kliknięciu ikony
Po otwarciu aplikacji inna aplikacja z paska powiadomień lub otwórz ustawienia
Naciśnięty przycisk Wstecz z innej aplikacji lub ustawień, a następnie użyty, może zobaczyć naszą aplikację
Po otwarciu dowolnego okna dialogowego na ekranie
Po zamknięciu okna dialogowego lub przycisku Wstecz z okna dialogowego
Dowolny telefon dzwoni i użytkownik w aplikacji
Gdy użytkownik naciśnie przycisk odbierania telefonu
Po zakończeniu połączenia
Gdy ekran telefonu jest wyłączony
Gdy ekran jest ponownie włączony
źródło
Całe zamieszanie jest spowodowane tym, że Google wybrało nieintuicyjne nazwy zamiast czegoś w następujący sposób:
Diagram aktywności można interpretować jako:
źródło
CYKL ŻYCIA ANDROIDA
Istnieje siedem metod zarządzania cyklem życia aplikacji na Androida:
Odpowiedz na jakie są wszystkie te metody:
Weźmy prosty scenariusz, w którym wiedza w jakiej kolejności są nazywane te metody pomoże nam wyjaśnić, dlaczego są one stosowane.
onCreate()
- - -> - - ->onStart()
onResume()
onPause()
- - ->onStop()
onRestart()
- - -> - - ->onStart()
onResume()
onStop()
- - ->onDestroy()
Istnieją cztery stany, które mogą istnieć:
Stan początkowy obejmuje:
Tworzenie nowego procesu Linux, przydzielanie nowej pamięci dla nowych obiektów interfejsu użytkownika i konfigurowanie całego ekranu. Więc większość pracy jest tutaj zaangażowana.
Stan pracy obejmuje:
Jest to aktywność (stan), która jest aktualnie wyświetlana na ekranie. Sam ten stan obsługuje takie rzeczy, jak pisanie na ekranie oraz dotykanie i klikanie przycisków.
Stan wstrzymany obejmuje:
Gdy aktywność nie znajduje się na pierwszym planie, a zamiast tego jest w tle, mówi się, że aktywność jest wstrzymana.
Stan zatrzymania obejmuje:
Zatrzymaną aktywność można kupić na pierwszym planie tylko poprzez jej ponowne uruchomienie, a także można ją zniszczyć w dowolnym momencie.
Menedżer działań obsługuje wszystkie te stany w taki sposób, aby wrażenia użytkownika i wydajność były zawsze najlepsze, nawet w scenariuszach, w których nowe działanie jest dodawane do istniejących działań
źródło
Podoba mi się to pytanie i odpowiedzi na nie, ale do tej pory nie obejmuje rzadziej używanych wywołań zwrotnych, takich jak onPostCreate () lub onPostResume () . Steve Pomeroy próbował schematu, w tym tych i ich związku z cyklem życia fragmentów Androida , na https://github.com/xxv/android-lifecycle . Poprawiłem duży schemat Steve'a, aby zawierał tylko część Aktywność, i sformatowałem go do wydruku jednostronicowego w formacie listowym. Opublikowałem go jako tekstowy plik PDF na stronie https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf, a poniżej znajduje się jego obraz:
źródło
Na stronie programistów Androida
onPause ():
onStop ():
Załóżmy teraz, że są trzy Działania i przejdziesz od A do B, wtedy onPauza A zostanie wywołana teraz z B do C, a następnie onPauza B i onStop A zostanie wywołana.
Wstrzymana aktywność zostaje wznowiona, a Stopped - ponownie uruchomiona.
Kiedy zadzwonisz
this.finish()
, onPause-onStop-onDestroy zostanie wywołany. Najważniejszą rzeczą do zapamiętania jest: wstrzymane działania zostają zatrzymane, a działanie zatrzymane zostaje zniszczone, gdy Android wymaga pamięci do innych operacji.Mam nadzieję, że to wystarczająco jasne.
źródło
Dodanie kilku dodatkowych informacji do wysoko ocenianej odpowiedzi (Dodano dodatkową sekcję KILLABLE i kolejny zestaw metod, które zostaną wywołane w cyklu życia):
Źródło: developer.android.com
Uwaga „ Możliwy do zabicia kolumnę ” w powyższej tabeli - dla metod oznaczonych jako możliwe do wywołania, po zwróceniu tej metody proces hostujący działanie może zostać zabity przez system w dowolnym momencie bez wykonania kolejnego wiersza kodu.
Z tego powodu należy użyć tej
onPause()
metody do zapisania wszelkich trwałych danych (takich jak zmiany wprowadzone przez użytkownika) do pamięci. Ponadto metodaonSaveInstanceState(Bundle)
jest wywoływana przed umieszczeniem działania w takim stanie tła, umożliwiając zapisanie dowolnego stanu instancji dynamicznej w danym działaniu do podanegoBundle
, który można później odebrać,onCreate(Bundle)
jeśli działanie musi zostać odtworzone.Należy pamiętać, że ważne jest zapisywanie trwałych danych
onPause()
zamiast,onSaveInstanceState(Bundle)
ponieważ nie są one częścią wywołań zwrotnych cyklu życia, więc nie będą wywoływane w każdej sytuacji, jak opisano w jego dokumentacji.Chciałbym dodać jeszcze kilka metod. Nie są one wymienione jako metody cyklu życia, ale będą wywoływane podczas cyklu życia, w zależności od niektórych warunków. W zależności od wymagań może być konieczne zaimplementowanie tych metod w aplikacji w celu prawidłowej obsługi stanu.
Mój kod aplikacji przy użyciu wszystkich tych metod:
Aktywność logowania:
wyjście: (Przed pauzą)
wyjście: (Po wznowieniu z pauzy)
Zauważ, że
onPostResume()
jest wywoływany, chociaż nie jest cytowany jako metoda cyklu życia.źródło
Uruchomiłem niektóre dzienniki zgodnie z powyższymi odpowiedziami i oto wynik:
Aktywność początkowa
Zatrzymywanie aktywności
Moim osobistym zdaniem tylko dwa są wymagane na Start i OnStop.
onResume wydaje się być w każdym przypadku powrotu, a onPauza w każdym przypadku opuszczenia (z wyjątkiem zamknięcia aplikacji).
źródło