我们安装了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