如何从Debug.MemoryInfo获取内存大小(以字节为单位)

时间:2018-02-01 11:01:00

标签: android process

  

在我的应用程序中,我想显示正在运行的进程列表和内存   为这些进程分配了

我在SOF中尝试了很多解决方案,最后我从thisthis link得到了这个答案。但问题是,我不知道如何从MemoryInfo获取以字节为单位的内存大小。如果提供了使用访问权限,则运行此代码。

我试过这段代码,

    final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    final List<ActivityManager.RunningAppProcessInfo> recentTasks = activityManager.getRunningAppProcesses();
    for (ActivityManager.RunningAppProcessInfo info : recentTasks) {
        Debug.MemoryInfo[] arrayofmem = activityManager.getProcessMemoryInfo(new int[]{info.pid});
        double size=0;
        for(Debug.MemoryInfo i:arrayofmem)
        {
            Debug.getMemoryInfo(i);
            size+=i.getTotalPss();
        }
    }

我不理解抛出的异常,

W/ActivityManager: getRunningAppProcesses: caller 10240 does not hold REAL_GET_TASKS; limiting output
W/u.myapp: type=1400 audit(0.0:1756): avc: denied { read } for uid=10240 name="mem" dev="debugfs" ino=2051842 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:debugfs:s0 tclass=file permissive=0

请救救我。在此先感谢!!!

1 个答案:

答案 0 :(得分:1)

首先,您在logcat中看到的消息不是例外,它只是一条警告消息。它表示如果您想获得有关所有正在运行的进程的所有信息,那么您的应用程序不会拥有您需要的权限REAL_GET_TASKS。由于您没有此权限,Android将仅返回某些信息(基本上您可以获取有关您自己的流程的信息,但不会获得任何其他信息)。

Debug.MemoryInfo中包含的值均以千字节为单位。

有关Debug.MemoryInfohttps://stackoverflow.com/a/2299813/769265

中值的详细信息,请参阅此答案