Cykl życia aktywności
143
jesteś tutaj
Co się stanie po uruchomieniu aplikacji?
Użytkownik uruchamia aplikację i klika przycisk
Start
, by rozpocząć działanie
stopera.
Metoda
runTimer()
zaczyna inkrementować liczbę sekund wyświetlanych na ekranie
w widoku tekstowym o identyfikatorze
time_view
.
Użytkownik obraca urządzenie.
Android uznaje to za zmianę konfiguracji i przygotowuje się do usunięcia aktywności.
Zanim to jednak zrobi, wywołuje metodę
onSaveInstanceState()
. Metoda ta zapisuje
wartości zmiennych
seconds
i
running
w obiekcie
Bundle
.
Urządzenie
seconds=8
running=true
Urządzenie
seconds=8
running=true
bundle
“seconds”=8
“running”=true
Zaraz mnie
usuną, muszę
was zapisać…
StopwatchActivity
StopwatchActivity
1
2
144
Rozdział 4.
Co się dzieje?
Historii ciąg dalszy
Android usuwa aktywność, a następnie ją odtwarza.
Zostaje wywołana metoda
onCreate()
, a do niej przekazywany jest obiekt typu
Bundle
.
Zostaje wywołana metoda runTimer(), a stoper rozpoczyna działanie
w miejscu, w którym wcześniej zostało ono przerwane.
Czas zmierzony przez stoper zostaje wyświetlony na ekranie urządzenia,
a odliczanie jest kontynuowane.
Urządzenie
Urządzenie
seconds=8
running=true
bundle
“seconds”=8
“running”=true
seconds=0
running=false
bundle
“seconds”=8
“running”=true
Obiekt Bundle zawiera wartości zmiennych seconds i running, zapisane przed
usunięciem aktywności.
Kod metody
onCreate()
przywraca wcześniejsze wartości zmiennych
seconds
i
running
,
odczytując je z obiektu
Bundle
.
StopwatchActivity
StopwatchActivity
3
4
5
Cykl życia aktywności
145
jesteś tutaj
Jazda próbna aplikacji
Wprowadź zmiany w kodzie swojej aktywności, a następnie uruchom aplikację. Kiedy klikniesz
przycisk
Start, stoper zacznie mierzyć czas i nie zatrzyma się nawet po obróceniu urządzenia.
Kiedy obrócimy urządzenie,
stoper wciąż będzie działał.
P
: Dlaczego Android chce
odtwarzać aktywność tylko dlatego,
że obróciliśmy ekran?
O
:
Metoda onCreate() jest normalnie
używana do przygotowywania ekranu. Jeśli
jej kod jest zależny od konfiguracji ekranu
(na przykład jeśli używamy odmiennych
układów dla urządzeń działających
w orientacji pionowej i poziomej), to
będziemy chcieli, by metoda onCreate()
była wywoływana po każdej zmianie
konfiguracji. Co więcej, możemy także chcieć
zmieniać teksty wyświetlane w interfejsie
użytkownika aplikacji, kiedy użytkownik
zmieni wybrane ustawienia lokalne.
P
: Dlaczego Android nie zapisuje
automatycznie wartości wszystkich
zmiennych? Dlaczego muszę ten kod
pisać ręcznie?
O
:
Może się zdarzyć, że nie będziesz
chciał zapisywać wartości wszystkich
zmiennych. Na przykład możesz używać
zmiennej zawierającej bieżącą szerokość
ekranu. Zapewne nie chciałbyś odtwarzać
wartości tej zmiennej podczas ponownego
wywołania metody onCreate().
P
: Czy
Bundle
to jakiś rodzaj mapy
zaimplementowanej w Javie?
O
:
Nie, ale ta klasa została
zaprojektowana, by działać podobnie do
klasy java.util.Map. Obiekty klasy
Bundle mają dodatkowe możliwości,
którymi nie dysponują mapy. Na przykład
można je przekazywać pomiędzy
procesami. To naprawdę bardzo przydatna
możliwość, gdyż pozwala Androidowi mieć
dostęp do bieżącego stanu aktywności.
głupie pytania
Nie istnieją
Get Android Programowanie aplikacji. Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.