Was passiert genau mit der Anwendung und den Daten, wenn Sie eine App von der Liste der derzeit laufenden Android-Apps entfernen? Lesen Sie weiter, während wir nachforschen.

Die heutige Question & Answer-Sitzung wird von Android Enthusiast zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppe von Q & A-Websites.

Die Frage

Leser von Android-Enthusiasten Eldarerathis ist neugierig auf die App-Swipe-Funktion, mit der Sie Ihre Liste der laufenden Apps über den Home-Button aufrufen und dann nach rechts ziehen können, vermutlich um sie zu schließen:

The recent apps list in Ice Cream Sandwich added the ability to swipe apps out of the list, thereby dismissing them permanently (and as far as I know this is a vanilla function, not a CM/custom ROM one). The documentation and platform highlights don’t appear to cover the under-the-hood workings of this functionality, but I’m curious to know what the system is actually doing.

Further adding to my curiosity, I decided to do a quick test: I started up Music on a CM9 install, then backed out of it. I then checked the recent apps list and saw it was indeed there (and in the proper state, based on the thumbnail). I then went into Settings->Applications and force hat die Musik-App gestoppt, aber sie wurde immer noch in der letzten Liste aufgeführt, sodass ich der Meinung bin, dass sie nicht mit Prozessen im Hintergrund verbunden ist.

Da mir bewusst wurde, dass Musik eine schlechte Wahl gewesen ist, habe ich auch die USA Today App getestet. Dies zeigte im Wesentlichen dasselbe Verhalten und es schien, als müsste es nach dem Zwangsstopp einen Neustart durchführen (was sinnvoll ist), obwohl das Miniaturbild in der Liste der letzten Apps dies nicht widerspiegelte (zwischengespeichert, schätze ich?).

Was passiert also eigentlich auf Betriebssystemebene, wenn Sie eine App aus der Liste der letzten Einträge entfernen? Löscht es einfach die Daten der App aus dem RAM und sammelt sie durch den Müll, wodurch der gespeicherte Status zerstört wird?

Was genau passiert, wenn Sie die App von der Liste streichen?

Die Antworten

Austin Mills, ein Entwickler von Android-Enthusiasten, bietet einige Einblicke:

Das Herausnehmen von Apps aus der Liste der letzten Apps ist Vanille und ja, nicht gut dokumentiert. Dies war das Thema einer anständigen Diskussionsrunde in verschiedenen Android-Foren… Der Konsens scheint hier in einigen Kommentaren am besten beschrieben zu werden: Das Verhalten ähnelt dem Schließen einer App, ist aber nicht genau dasselbe - im Allgemeinen (für Apps, die Definieren Sie nicht das explizite Zurück-Button-Handling. Es ist das Gleiche, als würden Sie innerhalb einer Anwendung so oft zurückschlagen, dass Sie sie verlassen.

Der Link enthält einige Details zu den Besonderheiten, aber insgesamt kann man sich vorstellen, dass er die Anwendung beendet.

Ich glaube, dass speziell für die Musik-App ein Dienst gestartet wird. Während die Aufgabe selbst (die Musik-App / Benutzeroberfläche) geschlossen wird, wird der Dienst jedoch weiterhin im Hintergrund ausgeführt, sodass Ihre Musik nicht plötzlich aufhört, nur weil die Aufgabe beendet ist wurde aus Gründen der Speicherverwaltung gelöscht. Das hat möglicherweise das beeinflusst, was Sie gesehen haben.

Dann beteiligte sich Eldarerathis am Frage-und-Antwort-Kreis des Lebens und recherchierte selbst, um die Antwort zu vervollständigen:

I appear to have found the magical search terms that led to some explanations from Google employees. Specifically, I found a couple of different places where Dianne Hackborn explains what happens when you swipe something out of the recent list. The first is a comment on one of her Google+ posts:

[W]hat specifically happens when you swipe away a recent task is it: (1) kills any background or empty processes of the application (see here for what this means), and (2) uses the new API to tell any services of the application about the task being removed so it can do whatever it thinks is appropriate.

She also notes in a blog comment:

Actually, removing an entry in recent tasks will kill any background processes that exist for the process. It won’t directly causes services to stop, however there is an API for them to find out the task was removed to decide if they want this to mean they should stop. This is so that removing say the recent task of an e-mail app won’t cause it to stop checking for e-mail.

If you really want to completely stop an app, you can long press on recent tasks to go to app info, and hit force stop there. Force stop is a complete kill of the app — all processes are killed, all services stopped, all notifications removed, all alarms removed, etc. The app is not allowed to launch again until explicitly requested.

So, it looks like the summary is that swiping an app out of the list will first kill all background processes for the app, then use onTaskRemoved um die App zu benachrichtigen, dass die Hintergrundaufgabe entfernt wurde. An diesem Punkt sieht es so aus, als ob es an der App liegt, zu entscheiden, was passiertist nicht eine schnelle und schnelle Regel darüber, was mit der App über diesen Punkt hinaus geschieht.


Haben Sie etwas zur Erklärung hinzuzufügen? Ton aus in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.

Top-Tipps:
Kommentare: