2017-03-14 2 views
1

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"

wurde

Dann 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

+1

Der beste Weg, Speicherlecks zu debuggen mit dem Android-Device Monitor ist. Es ist in der Tools-Menü in Android Studio –

+0

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. –

+0

Wenn du denkst, dass du Speicherlecks hast, benutze [leak canary] (https://github.com/square/leakcanary) – lelloman

Antwort

0
  1. adb shell dumpsys meminfo Paket auf High-End-Gerät mit app läuft, wird der Wert bei letzten Zeile der ersten Spalte ist der Verbrauch der App.
  2. adb shell dumpsys meminfo auf Low-End-Gerät ohne App läuft, der Wert nach der Zeile mit "Free RAM" ist der verbleibende Speicher.
  3. Vergleichen Sie Ihren App-Speicher mit dem verbleibenden Speicher, wahrscheinlich sind sie sehr nah und dann LMK (lowmemorykiller) wird Ihre App finden und sie zu töten.
  4. Ihr Gedächtnis zu optimieren, überprüfen Sie bitte das Ergebnis von Schritt 1 zurück
+0

Sorry, aber ich werde verraten, wie grün ich bin, wenn es um Android-Entwicklung geht. Ich habe keine Ahnung was "adb shell dumpsys meminfo" bedeutet. Was ist AdB? Ist es eine App, die ich ausführen muss? Ist es etwas, das ich irgendwo eingeben muss (auf dem Gerät oder in Android Studio)? –

Verwandte Themen