Wir haben eine Android-Hardware/Software-Kombination, die wir bei Kunden installieren.Android läuft mit wenig Speicher, ohne ersichtlichen Grund
Auf bestimmten Tablets beginnt der Speicher langsam zu laufen, und Android beginnt mit dem Töten unserer App, die dann automatisch von unserem Watchdog-Dienst neu gestartet wird.
Hier ist der Code, wir per-app memory usage
überwachen verwenden:
for(RunningAppProcessInfo info : am.getRunningAppProcesses()) {
int memused = am.getProcessMemoryInfo(
new int[]{info.pid})[0].getTotalPss();
Log.log(DIAG_INFO, "Process Mem: " + info.processName, memused);
}
Hier ist der Code, der uns overall system memory levels
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);
long availableMegs = mi.availMem/1048576L;
long threshold = mi.threshold /1048576L;
availableMegs
Tropfen in der Nähe des threshold
(64mb in unserem Fall) bekommt und Android fängt an, Sachen zu töten.
Aber, wenn wir die pro-Prozess Speicherbelegung betrachten, addieren Sie die TotalPss
Werte, wir erhalten eine normale Summe. Kein Prozess, der speichermäßig außer Kontrolle ist!
Irgendwelche Ideen, wo der fehlende RAM verschwunden ist?
Sie haben alle offene Verbindungen zu einem Datenbank/Web-Service von einigen Arten, die ihr möglicherweise fehlen? – ksudu94
Ich denke, der Gesamt-PSS-Wert gibt Ihnen nur die Benutzerspeicherbelegung (Alle Benutzerraumprozesse, auf die der Aktivitätsmanager zugreifen kann). Der gesamte Speicher ist Kernel + Treiber + Benutzerprozesse. am.getMemoryInfo() ruft die Informationen aus/proc/meminfo ab, die ziemlich genau auf die gesamte Systemspeicherauslastung bezogen sind. Auf diesen Tabs stimmt möglicherweise etwas nicht. nur ein Gedanke!! – digitizedx
Ich gehe davon aus, dass 'getRunningAppProcesses()' wahrscheinlich keinen Kernel oder anderen Speicherverbrauch auf Systemebene zurückgibt. wahrscheinlich nur auf der Anwendung/Dalvik Ebene. – minhaz