我們安裝了Android硬件/軟件組合,我們在客戶端安裝。Android內存不足,原因不明顯
在某些平板電腦上,內存開始不足,Android開始通過殺死我們的應用程序來實現它的功能,然後我們的看門狗服務自動重新啓動它。
這裏是我們用來監視per-app memory usage
代碼:
for(RunningAppProcessInfo info : am.getRunningAppProcesses()) {
int memused = am.getProcessMemoryInfo(
new int[]{info.pid})[0].getTotalPss();
Log.log(DIAG_INFO, "Process Mem: " + info.processName, memused);
}
這裏是可以讓我們overall system memory levels
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);
long availableMegs = mi.availMem/1048576L;
long threshold = mi.threshold /1048576L;
availableMegs
下降到接近threshold
(64MB在我們的情況下)的代碼和android開始殺死東西。
但是,當我們看每個進程的內存使用情況時,加上TotalPss
值,我們得到一個正常的總數。沒有任何失控的記憶方式!
任何想法,失蹤的RAM已經走了?
你要的某些種類,你們可能會丟失數據庫/ Web Service的任何打開的連接? – ksudu94
我認爲總的PSS值只是給你用戶空間內存使用量(活動管理器可以訪問的所有用戶空間進程)。內存總量是內核+驅動程序+用戶進程。 am.getMemoryInfo()從/ proc/meminfo獲取相對準確的系統內存使用情況。這些標籤上的某些內容可能實際上是錯誤的。只是一個想法!! – digitizedx
我假設'getRunningAppProcesses()'可能不會返回內核或其他系統級別的內存使用情況。可能只在應用程序/達爾維克級別上。 – minhaz