android中进程的内存信息

时间:2011-04-27 19:47:28

标签: android

我正在尝试计算android中单个进程使用的内存,因为我现在卡住了。

ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
android.os.Debug.MemoryInfo[] mem=am.getProcessMemoryInfo(ProcessId);

从上面的“MemoryInfo”我应该考虑什么?

{mem.getTotalPss() or mem.getTotalPrivateDirty() or mem.getTotalSharedDirty()}

获取进程使用的RAM量。

请帮我解决这个问题。提前谢谢。

3 个答案:

答案 0 :(得分:4)

  1. 简答:这很复杂,你可能不想这样做。
  2. 答案很长:see this question

答案 1 :(得分:1)

mem.getTotalPss()为您提供该进程在Kb中占用的总内存

答案 2 :(得分:0)

从marshmallow开始,您可以在MemoryInfo中找到一些可以查询的辅助函数。它还可以为您提供已解析(和额外)信息的列表。

请注意,至少在s6 summary.graphics上总是给出0。如果一个进程不是art / dalvik android进程,那么它只会在所有返回字符串上给出0。它会将它们返回到这个地图。

    int  pids[] =new int[1];
    pids[0]= pID;
    Debug.MemoryInfo [] mems1= am.getProcessMemoryInfo(pids);

    if(Build.VERSION.SDK_INT >= 23)
    if(mems1.length==1) {

        Debug.MemoryInfo meminfo=new Debug.MemoryInfo();

        Map<String, String> mems = mems1[0].getMemoryStats();

        for (Map.Entry<String, String> entry : mems.entrySet())
        {
            ret+=" k: "+entry.getKey()+":"+entry.getValue();
          //  addLineToSb(di, "m23: "+entry.getKey() + ":"+entry.getValue()+"kB");

        }


    }