Baza Wiedzy

Cykl życia Activity

Aby dobrze zrozumieć działanie aplikacji Andoridowych warto przyjrzeć się bliżej cyklowi życia Activity.

Każdy widok, który chcemy wyświetlić na ekranie musi dziedziczyć (extends; więcej o dziedziczeniu tutaj i tutaj) po Activity. Daje nam to możliwość nadpisania niektórych jej metod. Najczęściej używane jest tylko onCreate():

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState)
}

W większości wypadków jest to wystarczające do obsłużenia podstawowej funkcjonalności. Co jednak, jeśli chcemy wywołać jakąś akcję np. zapisanie wartości wpisanych pól po zamknięciu aktualnego widoku. Można to oczywiście rozwiązać na kilka sposobów m.in. oprogramować naciśnięcie klawisza powrotu. Moim zdaniem dużo lepiej jest podpiąć się pod konkretne zdarzenie związane z aktywnością. W tym wypadku onStop():

@Override
public void onStop() {
    super.onStop();
    saveAction();
}

Bardzo ważne jest pamiętanie o wywołaniu metody super.onStop(). Na szczęście jeśli o tym zapomnimy, prędzej czy później poinformuje nas o tym LogCat :)

 

Istnieją 4 stany w których może znajdować się Activity:

    • Działająca na ekranie
    • Utraciła focus, ale jest nadal widoczna, na przykład po pojawieniu się pop-upa.
    • Zatrzymana - działająca, ale niewidoczna. Po przejściu do innego Activity aktualny stan jest przetrzymywany w pamięci. Istnieje jednak możliwość, że system będzie potrzebował więcej wolnej pamięci i "zabije" takie Activity. Wtedy musi zostać ono od nowa stworzone i wszystkie niezapisane zmiany zostaną utracone. Tutaj możemy sobie radzić zapisując je uprzednio w onPause() i wczytując w onCreate()
    • Wyłączona

     

    Wszystkie akcje związane z cyklem życia Activity dostępne są na diagramie:

     

    Ze swojej strony chciałbym jeszcze dodać, że przed onCreate() wywoływany jest jeszcze konstruktor. Nie widziałem natomiast przypadków w aplikacjach Androidowych w których programiści decdowali się na jego użycie. Stoi za tym zapewne jakaś logika, więc osobiście polecam wrzucenie wszystkich akcji inicjujących do onCreate().

    Po więcej informacji zapraszam do dokumentacji.

    Najlepszy newsletter o Javie w Polsce

    Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

    Traktujemy Twoją prywatność poważnie. Nikomu nie udostępniamy Twojego maila no i zawsze możesz się wypisać.

    Komentarze do artykułu

    Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.

    Sebastian

    Jaką bibliotekę trzeba zaimportować, żeby móc skorzystać z polecenia saveAction()?

    Loony

    To jest pewnie metoda własna. Chodzi o własny kod na zapisanie stanu aplikacji.

    chcemy wywołać jakąś akcję np. zapisanie wartości wpisanych pól po zamknięciu aktualnego widoku

    Hubert

    czyli programując onPause() nie wiemy, czy system nie zmusi nas do ponownego utworzenia Activity jeśli nagle zabraknie pamięci?

    Marcin Kunert

    onPause() zostanie wywołana po tym jak naciśniemy przycisk "Home". Nasza aplikacja pozostanie włączona w tle. Od tego momentu może zostać w każdym momencie wyłączona automatycznie przez system, jeśli zabraknie pamięci, uprzednio zostanie wywołane jednak onStop() w którym możemy dokonać wszystkich rzeczy (z reguły będzie to zapisywanie danych do pamięci trwałej). Mam nadzieję, że dobrze zrozumiałem Twoje pytanie ;)

    Kurs Java WrocławJavaStart na Youtube