Ich habe eine App, von der ich dachte, dass sie funktionierte, bis jemand versuchte, sie auf einem sehr billigen Tablet mit sehr wenig Speicher auszuführen. Ich bin sicher, dass wenig Speicher das Problem ist, aber ich habe zwei Fragen: 1) mache ich alles, was Speicher verbraucht und 2) was zu tun ist, wenn ich auslaufe.App schlägt auf geringer Speicherhardware fehl
Dies ist meine App-Architektur: Meine App umfasst eine Hauptaktivität, die sequenziell viele untergeordnete Aktivitäten aufruft, um Benutzereingaben zu erhalten. Während der Laufzeit des Antrags wird jede Nebentätigkeit wahrscheinlich mehrmals aufgerufen. Jede untergeordnete Aktivität wird durch einen startActivityForResult-Aufruf aufgerufen. Wenn die Nebentätigkeit ihr Zeug gemacht hat, wird sie alle Ergebnisse in eine Absicht setzen und finish() aufrufen. Zurück in der Hauptaktivität erkennt onActivityResult, dass die untergeordnete Aktivität beendet wurde, verarbeitet die zurückgegebenen Daten und ruft dann die nächste untergeordnete Aktivität auf.
Mache ich hier etwas falsch? Insbesondere, wenn ich mit einer Nebentätigkeit fertig bin, werden all ihre Daten aus dem Speicher gelöscht? Wenn ich die gleiche untergeordnete Aktivität erneut anrufe, muss ich etwas Spezielles tun, um zu vermeiden, dass doppelte Kopien der Daten der Aktivität in den Speicher geladen werden?
Laufen meine Anwendung auf einem Low-Memory-System ist, dass ich die folgenden Meldungen im Android-Monitor erhalten: "auf einem Memory Low"
Ich sehe bis zu sieben Vorkommen von „Performing Stopp einer Aktivität, die nicht wieder aufgenommen wird“, dann (Was bedeutet das?)
„Dieses Fenster verloren ist“
Dann wieder ein „Durchführen Stopp eine Tätigkeit, die nicht wieder aufgenommen“
"Ausnahme, wenn Aktivität beginnen. Android.os.DeadObjectException"(Was ist das?)
"Dieses Fenster verloren"
wurdeDann stirbt meine App.
Ist meine Diagnose, dass dies ein Speicherproblem ist richtig? Führt meine Architektur zu Speicherlecks? Was kann ich tun, um das Problem zu beheben?
Jede Hilfe dankbar geschätzt.
freundlichen Grüßen Keith
Der beste Weg, Speicherlecks zu debuggen mit dem Android-Device Monitor ist. Es ist in der Tools-Menü in Android Studio –
Eine schnelle Google-Suche nach "Verwalten Sie Ihre App Android-Speicher" führt Sie zu Googles Android Online-Dokumentation, die Ihnen helfen sollte, begann im Speicher Debugging Ihrer App.Abgesehen davon sollten Sie die Verwendung von Fragmenten nach Möglichkeit in Betracht ziehen und die Anzahl der Aktivitäten minimieren, die Sie in Ihrer Anwendung haben. –
Wenn du denkst, dass du Speicherlecks hast, benutze [leak canary] (https://github.com/square/leakcanary) – lelloman