Ostatnia lista aplikacji w Ice Cream Sandwich dodała możliwość usuwania aplikacji z listy, tym samym usuwając je na stałe (i o ile wiem, jest to funkcja waniliowa, a nie CM / niestandardowa pamięć ROM). Dokumentacja i najważniejsze informacje o platformie nie wydają się obejmować podstawowych funkcji tej funkcji, ale jestem ciekawy, co tak naprawdę robi system.
Jeszcze bardziej zwiększając moją ciekawość, postanowiłem zrobić szybki test: uruchomiłem Muzykę na instalacji CM9, a potem ją wycofałem. Następnie sprawdziłem listę ostatnich aplikacji i zobaczyłem, że rzeczywiście tam była (i we właściwym stanie, na podstawie miniatury). Następnie wszedłem Settings->Applications
i wymusiłem zatrzymanie aplikacji Muzyka, ale wciąż była ona wymieniona na ostatniej liście, co doprowadziło mnie do przekonania, że nie jest związana z procesami pozostającymi w tle.
Zdając sobie sprawę, że Muzyka może być złym wyborem, przetestowałem również aplikację USA Today. Wykazało to w zasadzie to samo zachowanie i wydawało się, że zostało zmuszone do „ponownego uruchomienia” po wymuszonym zatrzymaniu (co ma sens), chociaż miniatura na liście ostatnich aplikacji tego nie odzwierciedlała (zgaduję, zgaduję?).
Co się dzieje na poziomie systemu operacyjnego, gdy przesuwasz aplikację poza ostatnią listę? Czy po prostu usuwa dane aplikacji z pamięci RAM i śmieci je zbierają, niszcząc zapisany stan?
źródło
Wydaje mi się, że znalazłem magiczne wyszukiwane hasła, które doprowadziły do niektórych wyjaśnień od pracowników Google. W szczególności znalazłem kilka różnych miejsc, w których Dianne Hackborn wyjaśnia, co się dzieje, gdy przesuwasz coś z ostatniej listy. Pierwszy to komentarz do jednego z jej wpisów w Google+ :
W komentarzu na blogu zauważa również :
Wygląda na to, że podsumowanie polega na tym, że przeciągnięcie aplikacji z listy najpierw zabije wszystkie procesy działające w tle, a następnie
onTaskRemoved
powiadomi aplikację, że zadanie w tle zostało usunięte. W tym momencie wygląda na to, że to aplikacja musi zdecydować, co się stanie, więc wydaje mi się, że technicznie nie ma twardej i szybkiej reguły dotyczącej tego, co dzieje się z aplikacją poza tym punktem.źródło
W kodzie źródłowym znajdują się informacje o klasach com.android.internal.policy.impl.RecentApplicationsBackground i com.android.internal.policy.impl.RecentApplicationsDialog .
Jeśli przeczytam je poprawnie, istnieją specjalne procedury obsługi do wybierania aplikacji, ale nic specjalnego do przesuwania ich, z wyjątkiem tych
onDetachedFromWindow()
, które wywołują,com.android.View.onDetachedFromWindow()
co w zasadzie ukrywa element i usuwa jego dane. Oznaczałoby to, że po przesunięciu aplikacji nie dzieje się nic specjalnego, co odpowiada odpowiedzi Austina Millsa, ponieważ ponieważ lista nie pokazuje aktywnej aplikacji,onPause()
i inne wywołania systemowe wykonywane podczas „zamykania” aplikacji mają już się stało.źródło
Myślę, że zrobi to tak samo jak przycisk Wstecz. Z wyjątkiem jednej małej zmiany. Będzie to
finish()
cała aktywność / fragmenty w aplikacji.Właśnie wykonałem małe testy z małą aplikacją do samodzielnego budowania. Ty też możesz przetestować. Oto moja aplikacja testująca: https://bitbucket.org/Leandros99/lifecycletestest (dostępne także do pobrania. Dla tych, którzy nie mogą budować.)
W każdej metodzie cyklu życia działania ( http://developer.android.com/reference/android/app /Activity.html#ActivityLifecycle ) wydrukuj dziennik aplikacji. Możesz go wyświetlić za pomocą adb logcat (zainstaluj Android SDK, cd na platformie-narzędziach w cmd / shell i wpisz
adb logcat
. Teraz zobaczysz, za każdym razem, gdy robisz coś takiego jak przycisk powrotu lub home, aplikacja drukuje wspomnianą powyżej metodę cyklu życia. )Twoje pytanie: jeśli przeciągnę aplikację z ostatniej szuflady aplikacji,
onDestroy
metoda zostanie wywołana. Działa prawie tak samo jak przycisk Wstecz.Mam nadzieję, że trochę pomogłem. Jeśli są pytania, po prostu zapytaj.
źródło
Zamyka aplikację i jej dane przechowywane w pamięci RAM. Dzięki temu zyskujesz więcej miejsca w pamięci RAM, dzięki czemu możesz uruchamiać inne aplikacje. Jednak usługi w tle NIE są automatycznie wymuszane zamykaniem w wyniku zamknięcia używanej aplikacji.
źródło