Android内存运行不足,没有明显原因

时间:2014-04-01 16:58:08

标签: android memory memory-management android-activity

我们在客户端站点安装了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的任何想法都已消失?

1 个答案:

答案 0 :(得分:4)

您是否使用过Eclipse Memory Analyzer(MAT)等外部工具?它可能会为您提供比应用内测量更好的视角。它并不难使用,但确实需要一些设置。其使用Here's a pretty good write-up

在Eclipse系统信息视图中,可以在设备上的所有应用程序中报告内存的解决方案。要使用它,请打开DDMS透视图,然后在Devices视图中选择一个设备。然后打开System Information视图,并在左侧下拉列表中选择Memory usage。每次单击Update from Device时,您都可以获得设备中使用的内存快照。

enter image description here