Log.i(TAG, " memoryInfo.threshold " + memoryInfo.threshold + "n" );
List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
Map<Integer, String> pidMap = new TreeMap<Integer, String>();
for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses)
{
pidMap.put(runningAppProcessInfo.pid, runningAppProcessInfo.processName);
}
Collection<Integer> keys = pidMap.keySet();
for(int key : keys)
{
int pids[] = new int[1];
pids[0] = key;
android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
for(android.os.Debug.MemoryInfo pidMemoryInfo: memoryInfoArray)
{
Log.i(TAG, String.format("** MEMINFO in pid %d [%s] **n",pids[0],pidMap.get(pids[0])));
Log.i(TAG, " pidMemoryInfo.getTotalPrivateDirty(): " + pidMemoryInfo.getTotalPrivateDirty() + "n");
Log.i(TAG, " pidMemoryInfo.getTotalPss(): " + pidMemoryInfo.getTotalPss() + "n");
Log.i(TAG, " pidMemoryInfo.getTotalSharedDirty(): " + pidMemoryInfo.getTotalSharedDirty() + "n");
}
}
在看到上述代码之前,自己按照API说明也写了类似代码如下,包含了更多的输出参数。如果要检查其他进程的内存使用情况,可略去循环中的条件判断。 按stackoverflow.com中帖子的说法 Pss的值是最能表明进程使用内存状况
public long getmem_SELF() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> procInfo = am.getRunningAppProcesses();
for (RunningAppProcessInfo runningAppProcessInfo : procInfo) {
System.out.println(runningAppProcessInfo.processName+ String.format
(",pid = %d", runningAppProcessInfo.pid));
if( runningAppProcessInfo.processName.indexOf(this.getPackageName()) != -1 )
{
int pids[] = {runningAppProcessInfo.pid};
Debug.MemoryInfo self_mi[] = am.getProcessMemoryInfo(pids);
StringBufferstrbuf = new StringBuffer();
strbuf.append(" proccess Name:").append(runningAppProcessInfo.processName)
.append("n pid:").append(runningAppProcessInfo.pid)
.append("n dalvikPrivateDirty:").append(self_mi[0].dalvikPrivateDirty)
.append("n dalvikPss:").append(self_mi[0].dalvikPss)
.append("n dalvikSharedDirty:").append(self_mi[0].dalvikSharedDirty)
.append("n nativePrivateDirty:").append(self_mi[0].nativePrivateDirty)
.append("n nativePss:").append(self_mi[0].nativePss)
.append("n nativeSharedDirty:").append(self_mi[0].nativeSharedDirty)
.append("n otherPrivateDirty:").append(self_mi[0].otherPrivateDirty)
.append("n otherPss:").append(self_mi[0].otherPss)
.append("n otherSharedDirty:").append(self_mi[0].otherSharedDirty)
.append("n TotalPrivateDirty:").append(self_mi[0].getTotalPrivateDirty())
.append("n TotalPss:").append(self_mi[0].getTotalPss())
.append("n TotalSharedDirty:").append(self_mi[0].getTotalSharedDirty());
Log.v("TEST",strbuf.toString());
}
}