安卓:我的应用程序使用了多少内存?

5

内存似乎是一个很大的话题,我找不到具体的答案。我知道堆中有多少可用内存以及应该使用多少,但我需要知道如何编写程序来动态确定我的应用程序使用了多少堆内存?以及我总共使用了多少内存?


1
请查看以下网址:https://dev59.com/63E95IYBdhLWcg3wd9tK 和 http://kohlerm.blogspot.in/2009/04/analyzing-memory-usage-off-your-android.html。 - user370305
2个回答

3

这个是有效的:

  Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
  Debug.getMemoryInfo(memoryInfo);

  String memMessage = String.format("App Memory: Pss=%.2f MB\nPrivate=%.2f MB\nShared=%.2f MB",
  memoryInfo.getTotalPss() / 1024.0,
  memoryInfo.getTotalPrivateDirty() / 1024.0,
  memoryInfo.getTotalSharedDirty() / 1024.0);

  Toast.makeText(this,memMessage,Toast.LENGTH_LONG).show();
  Log.i("log_tag", memMessage);

为什么要除以1024?根据Android文档,结果以kB(1000的倍数)而不是KB或KIB表示。https://developer.android.com/reference/android/os/Debug.MemoryInfo.htmlhttps://en.wikipedia.org/wiki/Kilobyte - chris

2

使用 top -d 1 -n 1 Android Shell 命令获取所有进程列表及其进程名称或由进程使用的内存,并从 System 返回字符串中提取您的进程信息:

BufferedReader in = null;

        try {
            Process process = null;
            process = Runtime.getRuntime().exec("top -n 1 -d 1");

            in = new BufferedReader(new 
            InputStreamReader(process.getInputStream()));

            String line ="";
            String content = "";

            while((line = in.readLine()) != null) {
                content += line + "\n";
            }
            System.out.println(content);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally {
            if(in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }


你将会得到字符串:

PID  PPID USER   STAT VSZ  %MEM  %CPU COMMAND
9673 9672 root    R   712   0.1   0.0 top -d 1 -n 1
2489 2386 system  S   369m  87.7  0.0 system_server
3101 2386 app_23  S   304m  72.3  0.0 com.android.browser
2581 2386 radio   S   279m  66.3  0.0 com.android.phone
2585 2386 app_15  S   271m  64.4  0.0 com.android.launcher

我不明白你展示的 %mem 数字是什么意思。 - user1445716
@user1445716:%MEM 表示进程使用的内存,例如 com.android.browser 目前使用 72.3 内存,而 com.android.launcher 目前使用 64.4。 - ρяσѕρєя K
@user1445716:但我不确定87.7、72.3的值是以百分比或其他格式呈现的,所以我认为你可以通过谷歌搜索来解决。 - ρяσѕρєя K
但是72.3% + 87.7%大于100%...这是我不理解的价值。我想我正在寻找应用程序当前在堆上使用的内容。我知道堆上可用的内容,也知道我应该使用什么,唯一缺少的是我当前在堆上使用了什么? - user1445716

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接