Rysunek 1 - Wiele zombie zostało zabitych podczas badania tej odpowiedzi
Zabijanie procesu Java VM aplikacji na Androida na poziomie systemu operacyjnego nie jest zalecane. Niestety, dokładnie to robi okno urządzenia zaćmienia „stop”, podobnie jak System.exit () i polecenie powłoki „kill”.
To podważa normalne metody cyklu życia aplikacji, takie jak onStop (), onDestroy () i finalize ().
Wiele aplikacji wymaga tych metod do łagodnego wyjścia (na przykład, jeśli używają obiektów systemowych, takich jak Sensor, MediaPlayer, Equalizer, Visualizer itp.).
Te obiekty systemowe kręcą się wokół zasobów systemowych z uchwytami śmierci zombie, jeśli release () nie jest wywoływany jawnie podczas tych metod cyklu życia. Patrz rys. 1 powyżej. Może to uniemożliwić ponowne uruchomienie aplikacji, a nawet wymagać ponownego uruchomienia. To jest niewdzięczny aspekt.
Jedynym rozwiązaniem jest upewnienie się, że zawsze czysto zamykasz aplikację za pomocą wywołania onStop () lub onDestroy () lub przynajmniej finalize (). Debugger robi to, podobnie jak system operacyjny podczas zamykania.
Możesz ustawić aplikację, aby przechwytywała zdarzenia SIG_HUP, aby wymusić bezpieczne wyjście z wiersza poleceń.
Jedyny przypadek, w którym można zabić maszynę wirtualną aplikacji, znajduje się w stanie ANR (już jest zombie). Błędy ANR muszą zostać naprawione. Nigdy nie wdrażaj aplikacji, która może wejść w ten stan. To jest wyjątkowo niegrzeczne.
Możesz użyć Google Analytics i Sklepu Play, aby monitorować ich wdrażanie. Nie chcesz, aby źli użytkownicy wystawiali recenzje ANR z jedną gwiazdką po ponownym uruchomieniu z powodu aplikacji zombie. Bardzo źle.
Pamiętaj, że Android to Linux: traktuj go jak prawdziwy system operacyjny i szanuj cykl życia aplikacji, w przeciwnym razie z pewnością zmierzysz się z przerażającą apokalipsą zombie.
PS: Jeśli nie lubisz analogii z zombie, to co powiesz na Fantazję?