2013-05-09 10 views

Odpowiedz

11

Jeśli moja aplikacja wywala

onPause() nie nazywa się tutaj, ale to nie powinno przeszkadzać, jak cały proces aplikacja przestaje istnieć, z uwzględnieniem wszystkich wątków utworzonych (UI lub inny) .

aktywny jakoś przestaje istnieć

onPause() będzie wywoływana zawsze, gdy aktywny jest przesuwany do tła z nowej wiedzy, która odbywa się w każdy możliwy sposób, w którym swoją aktywność może być zamknięty, z wyjątkiem w przypadku awarii Twojej aplikacji. Jednak, jak wspomniałem powyżej, awarie aplikacji domyślnie zabijają wątek.

onPause() jest zasadniczo wywoływana za każdym razem, gdy działanie nie jest już na pierwszym planie. Twoja Aktywność może być nadal żywa i jest w pamięci po wywołaniu onPause(), ale nie ma scenariusza, który mógłbym wymyślić, w której Twojej Aktywności jest żywy iw tle bez wywołania onPause().

+0

co się dzieje, gdy pamięć jest niska i system musi odzyskać pamięć na bieżące działające operacje w takim przypadku wstrzymane działania zostaną zniszczone (w zależności od priorytetu)? – Raghunandan

4

Tak, onPause() zostanie wywołany, gdy działanie nie będzie już działać. Załóżmy, że działanie jest zamknięte, a sekwencja zdarzeń będzie onPause() -> ->onDestroy(). Nawet jeśli twoja aktywność prześlizguje się w tle po rozpoczęciu innej aktywności lub gdy ekran się wyłączy, onPause() jest zawsze wywoływana, nawet jeśli pozostałe dwie metody nie są wywoływane. Więc nawet jeśli aktywność ustanie, zostanie wywołana onPause(), a twój wątek zostanie zabity.

Ale kiedy Twoja aplikacja ulega awarii, wraz z całą aktywnością, nawet wątek, który uruchomiłeś, zostanie obsłużony przez Androida, kończąc wszystko.

1

Załóżmy, że masz dwie aktywności A i B. Nawigujesz z A do B. Akcja A przechodzi do tła, tzn. Działanie A jest wstrzymane. Aktywność B skupia się na pierwszym planie. Po kliknięciu przycisku Wstecz aktywność B jest wyskakiwana z tylnego stosu, a aktywność A skupia się, tzn. Aktywność A wznawia się.

Po wyświetleniu okna dialogowego w działaniu, działanie w stanie wstrzymanym i okno dialogowe jest wyświetlane po kliknięciu przycisku Wstecz, okno dialogowe jest odrzucane, a działanie jest wznawiane (na pierwszym planie).

Gdy aktywność nie jest już uruchomiona, jest w tle, dlatego jest wstrzymana. Zgadzam się z Raghavem Soodem na to, co dzieje się, gdy aplikacja się zawiesza.

zwykle należy używać OnPause() wywołania zwrotnego:

animacji zatrzymać lub innych bieżących działań, które mogłyby zużywają CPU. Zatwierdzam niezapisane zmiany, ale tylko wtedy, gdy użytkownicy oczekują, że zmiany te zostaną trwale zapisane po ich opuszczeniu (na przykład w wersji roboczej e-maila). Zwolnij zasoby systemowe, takie jak odbiorniki rozgłoszeniowe, uchwyty do czujników (np. GPS) lub wszelkie zasoby, które mogą wpływać na żywotność baterii, gdy aktywność użytkownika jest wstrzymana, a użytkownik ich nie potrzebuje.

Uwaga:

Wiele zadań może odbywać się w tle na raz. Jeśli jednak użytkownik wykonuje jednocześnie wiele zadań w tle, system może rozpocząć niszczenie działań w tle w celu odzyskania pamięci, co spowoduje utratę stanów aktywności.

Powiązane problemy