Hallo, ich frage mich, wie Android den Speicher verwaltet, und ich kann nirgendwo eine genaue Antwort finden. Nehmen wir an, ich habe eine Anwendung mit 5 Aktivitäten auf dem aktuellen Aktivitätsstapel (4 werden gestoppt und 1 wird fortgesetzt). Es ist kein Dienst verbunden. Ich drücke die HOME-Taste, damit alle meine Aktivitäten gestoppt werden. Ich starte eine andere speicherintensive Anwendung und der gesamte Gerätespeicher ist langsam niedrig. Und die Frage ist
... Was passiert mit meiner Bewerbung?
- Kann das System nur eine oder einige meiner Aktivitäten zerstören, um den Speicher wiederherzustellen?
- Wird das System den gesamten Prozess meiner Bewerbung beenden? Werden alle Aktivitäten schön zerstört?
- Was passiert, wenn ich zu meiner Bewerbung zurückkehre, wenn sie vollständig beendet wurde? Wird es von Anfang an beginnen (wie beim ersten Start) oder wird es versuchen, Aktivitäten in den vorherigen Zustand zurückzubringen / wenn ja - ist es nur die oben auf dem Stapel oder alle?
AKTUALISIEREN:
Bevor ich diese Frage stelle, habe ich einige Male den Aktivitätslebenszyklus gesehen, aber er hat keine Antworten auf meine Fragen. Ich habe einige Tests gemacht und ich habe einige Antworten. "Prozess stoppen" in DDMS war ein Hinweis zum Testen.
Ich habe die Antwort auf Frage 1 nicht getestet, aber wie der Leitfaden sagt:
Wenn eine Aktivität angehalten oder gestoppt wird, kann das System die Aktivität aus dem Speicher löschen, indem es sie entweder zum Abschluss auffordert oder einfach den Prozess beendet.
Es scheint, dass eine oder mehrere der Aktivitäten (mit der onDestroy-Methode) sanft zerstört werden können, ohne den Prozess zu beenden. Sie erhalten einfach (onCreate + Bundle), wenn Sie zu ihnen zurückkehren.
Frage 2 Antwort:
JA. Im Allgemeinen beendet das System den gesamten Prozess. Dies bedeutet, dass alle Daten einschließlich Aktivitäten und statischen Feldern zerstört werden. Dies wird NICHT gut gemacht - Sie werden für keine Ihrer angehaltenen / gestoppten Aktivitäten onDestroy oder finialize () erhalten. Aus diesem Grund wird saveInstanceState () unmittelbar vor der onPause-Methode aufgerufen. onPause ist im Grunde die letzte Methode, bei der Sie etwas speichern sollten, da Sie nach dieser Methode onStop oder onDestroy nie mehr sehen konnten. Das System kann den Prozess einfach beenden und alle Ihre Objekte zerstören, unabhängig davon, was sie enthalten und was sie tun.
Frage 3 Antwort:
Was passiert, wenn Sie zu einer getöteten Anwendung zurückkehren?
- Vor Android 2.2 startet die Anwendung von Anfang an mit der Launcher-Aktivität.
- Ab 2.2 stellt das System den vorherigen Anwendungsstatus wieder her. Was heißt das? Dies bedeutet, dass die letzte sichtbare Aktivität neu erstellt wird (onCreate + Bundle). Was passiert mit dem Aktivitätsstapel? Der Stapel ist in Ordnung, aber alle Aktivitäten darauf sind tot. Jeder von ihnen wird neu erstellt (onCreate + Bundle), wenn Sie mit der Schaltfläche "Zurück" darauf zurückkommen. Daran ist noch etwas:
Normalerweise löscht das System in bestimmten Situationen eine Aufgabe (entfernt alle Aktivitäten vom Stapel über der Stammaktivität), wenn der Benutzer diese Aufgabe auf dem Startbildschirm erneut auswählt. Dies erfolgt normalerweise, wenn der Benutzer die Aufgabe eine bestimmte Zeit lang nicht besucht hat, z. B. 30 Minuten.
Fazit?
- Denken Sie nicht, dass die Behandlung von Aktivitätsrotationsproblemen durch Android gelöst werden kann: configChanges = "Orientierung". Wenn Sie das tun, werden Sie viele andere Probleme bekommen, die Sie nicht einmal kennen.
- Testen Sie Ihre Anwendung mit der Schaltfläche DDMS - Prozess stoppen. Sieh dir das an
- Seien Sie vorsichtig, wenn Sie statische Variablen verwenden. Denken Sie nicht, dass Sie sie bei der Initialisierung in Aktivität 1 in Aktivität 2 initialisieren lassen. Der einzige sichere Ort für die Initialisierung der globalen Statik ist die Anwendungsklasse.
- Denken Sie daran, dass Sie möglicherweise nie onStop oder onDestroy sehen. Schließen Sie Dateien / Datenbanken und stoppen Sie Downloader in onPause. Wenn Sie möchten, dass die App etwas in BG tut, verwenden Sie den Vordergrunddienst.
Das wäre es ... Hoffe ich habe mit meinem essey geholfen :)