在我的应用程序中,我想显示正在运行的进程列表和内存 为这些进程分配了。
我在SOF中尝试了很多解决方案,最后我从this和this 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
请救救我。在此先感谢!!!
答案 0 :(得分:1)
首先,您在logcat中看到的消息不是例外,它只是一条警告消息。它表示如果您想获得有关所有正在运行的进程的所有信息,那么您的应用程序不会拥有您需要的权限REAL_GET_TASKS。由于您没有此权限,Android将仅返回某些信息(基本上您可以获取有关您自己的流程的信息,但不会获得任何其他信息)。
Debug.MemoryInfo
中包含的值均以千字节为单位。
有关Debug.MemoryInfo
:https://stackoverflow.com/a/2299813/769265