Kiedy przesuwasz aplikację z listy aktualnie uruchomionych aplikacji na Androida, co dokładnie dzieje się z aplikacją i danymi? Czytaj dalej, gdy badamy.
Dzisiejsza sesja pytań i odpowiedzi jest dostępna dzięki uprzejmości Android Enthusiast - podrzędnej sekcji Stack Exchange, opartej na społeczności grupy witryn z pytaniami i odpowiedziami.
Czytelnik Android Entuzjastów Eldarerathis jest ciekawy, w jaki sposób można przesuwać listę uruchomionych aplikacji za pomocą przycisku strony głównej, a następnie przesuń palcem w prawo, prawdopodobnie, aby je zamknąć:
Ostatnia lista aplikacji w Ice Cream Sandwich dodała możliwość usuwania aplikacji z listy, co powoduje ich trwałe odrzucenie (i o ile wiem, jest to funkcja waniliowa, a nie CM / niestandardowa ROM). Dokumentacja i podkreśla platformy nie wydają się obejmować działania tej funkcji pod maską, ale jestem ciekawy, co system faktycznie robi.
Wciąż dodając do mojej ciekawości, zdecydowałem się zrobić szybki test: uruchomiłem Music na instalacji CM9, a następnie wycofałem się z niego. Następnie sprawdziłem listę ostatnich aplikacji i zobaczyłem, że rzeczywiście tam był (i we właściwym stanie, w oparciu o miniaturę). Potem wszedłem
Ustawienia-> Aplikacje
i siła zatrzymała aplikację Muzyka, ale wciąż była wymieniona na najnowszej liście, co doprowadziło mnie do przekonania, że nie jest ona związana z procesami zachodzącymi w tle.Zdając sobie sprawę, że muzyka mogła być kiepskim wyborem, testowałem także aplikację USA Today. To miało zasadniczo takie samo zachowanie i wydawało się, że było zmuszone do "ponownego uruchomienia" po zatrzymaniu siły (co ma sens), chociaż miniaturka z ostatniej listy aplikacji nie odzwierciedla tego (buforowana, zgaduję?).
Co się dzieje na poziomie systemu operacyjnego, gdy przesuwasz aplikację z ostatniej listy? Czy po prostu usuwa dane aplikacji z pamięci RAM i je zbiera, niszcząc zapisany stan?
Co dokładnie dzieje się po usunięciu aplikacji z listy?
Entuzjasta Androida Entuzjasta Austin Mills oferuje pewien wgląd:
Przesuwanie aplikacji z listy ostatnich aplikacji to wanilia i tak, nie jest dobrze udokumentowana. To był temat przyzwoitej dyskusji na różnych forach Androida ... w niektórych komentarzach najlepiej opisać konsensus: zachowanie jest podobne do, ale nie do końca takie samo, jak zamykanie aplikacji - w ogóle (dla aplikacji, które nie definiuj jawnego manipulowania przyciskami wstecznymi) to to samo, co odskakiwanie wystarczająco często z poziomu aplikacji, którą z niego wychodzisz.
Łącze ma trochę więcej szczegółów na temat szczegółów, ale ogólnie można myśleć o tym, jak zamknąć aplikację.
Specyficzne dla aplikacji Muzyka, wydaje mi się, że uruchamia usługę, więc podczas gdy samo zadanie (aplikacja Muzyka / interfejs użytkownika) może zostać zamknięte, usługa będzie nadal działać w tle, aby Twoja muzyka nie zatrzymała się nagle tylko dlatego, że zadanie został usunięty z powodów związanych z zarządzaniem pamięcią. To mogło mieć wpływ na to, co widziałeś.
Następnie, uczestnicząc w kółku życia pytań i odpowiedzi, Eldarerathis wrócił z własnymi badaniami, aby dopracować odpowiedź:
Wygląda na to, że znalazłem magiczne wyszukiwane hasła, które doprowadziły do 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] konkretnie dzieje się, gdy odrzucisz ostatnie zadanie, to: (1) zabija każde tło lub puste procesy aplikacji (zobacz tutaj, co to oznacza) i (2) używa nowego interfejsu API do powiadamiania o wszelkich usługach wniosek o usuniętym zadaniu, aby mógł zrobić to, co uważa za stosowne.
Ona również zauważa w komentarzu na blogu:
W rzeczywistości usunięcie wpisu z ostatnich zadań zabije wszystkie procesy działające w tle, które istnieją w tym procesie. Nie spowoduje to bezpośrednio zatrzymania usług, jednak istnieje interfejs API, dzięki któremu mogą dowiedzieć się, że zadanie zostało usunięte, aby zdecydować, czy chcą, aby to oznaczało, że powinny przestać. Jest tak, że usunięcie mówi, że ostatnie zadanie aplikacji e-mail nie spowoduje, że przestanie sprawdzać pocztę e-mail.
Jeśli naprawdę chcesz całkowicie zatrzymać aplikację, możesz długo naciskać na ostatnie zadania, aby przejść do informacji o aplikacji i trafić tam na siłę. Wymuszenie zatrzymania jest całkowitym zabójstwem aplikacji - wszystkie procesy zostają zabite, wszystkie usługi zatrzymane, wszystkie powiadomienia usunięte, wszystkie alarmy usunięte itd. Aplikacja nie może ponownie uruchomić się, dopóki nie zostanie wyraźnie zażądana.
Wygląda więc na to, że przesuwanie aplikacji z listy najpierw zabije wszystkie procesy działające w tle dla aplikacji, a następnie użyje
onTaskRemoved
powiadomić aplikację, że zadanie w tle zostało usunięte. W tym momencie wygląda na to, że to aplikacja decyduje o tym, co się dzieje, więc domyślam się, że to technicznienie jest twarda i szybka reguła dotycząca tego, co dzieje się z aplikacją za tym punktem.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.