Co dokładnie dzieje się podczas przesuwania aplikacji na Androida z listy ostatnich aplikacji?
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 użytkownika Android Enthusiast - podsekcji Stack Exchange, opartej na społeczności grupy witryn z pytaniami i odpowiedziami.
Pytanie
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, na podstawie miniatury). 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, przetestowałem także aplikację USA Today. Wykazywało to zasadniczo takie samo zachowanie i wydawało się, że było zmuszone do "ponownego uruchomienia" po zatrzymaniu siły (co ma sens), chociaż miniaturka na liście ostatnich aplikacji nie odzwierciedla tego (buforowana, zgaduję?).
Co się dzieje na poziomie systemu operacyjnego, gdy przesuwasz aplikację z ostatniej listy? Czyści po prostu dane aplikacji z pamięci RAM i je zbiera, niszcząc zapisany stan?
Co dokładnie dzieje się po usunięciu aplikacji z listy?
Odpowiedzi
Entuzjasta Androida Entuzjasta Austin Mills oferuje pewien wgląd:
Przesuwanie aplikacji z listy ostatnich aplikacji to robota waniliowa i 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 - ogólnie (dla aplikacji, które nie definiuj jawnego manipulowania przyciskami wstecznymi) to to samo, co odbijanie do tyłu wystarczająco często z poziomu aplikacji, z której 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 ona 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 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 dzieje się, gdy przesuniesz 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 API, aby powiedzieć jakiekolwiek usługi 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 w ostatnich zadaniach spowoduje zabicie procesów działających w tle istniejących dla tego procesu. Nie spowoduje to bezpośrednio zatrzymania usług, jednak istnieje interfejs API, aby 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 to całkowite zabicie aplikacji - wszystkie procesy zostają zabite, wszystkie usługi zatrzymane, wszystkie powiadomienia usunięte, wszystkie alarmy usunięte itd. Nie można ponownie uruchomić aplikacji, 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 technicznie nie jest twarda i szybka reguła dotycząca tego, co dzieje się z aplikacją po przekroczeniu tego punktu.
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.