2012-04-09 38 views
1

我試圖找到使用dalvikPss值的每個運行的應用程序和服務的相對內存使用的建議hereAndroid的:如何讓所有正在運行的進程作爲建議有

的總PSS,我需要所有的總結正在運行的進程的PSS值。我的問題是,如何獲得所有正在運行的進程的pss值?

我的理解是,在Android的服務和任務鏈接到流程。這種理解是否正確?

如果是這樣,將彙總所有進程的PSS值從ActivityManager.getRunningAppProcesses返回給我的所有正在運行的進程(服務和任務包括在內)的總PSS?

+0

我沒有。這是我的最後一招,因爲從應用程序啓動控制檯可能會有一些不好的性能影響嗎? 而且除了實現這一目標,我也想知道,如果我的理解是處理代表的服務和任務是正確的。你有什麼想法嗎? – 2012-04-09 11:10:45

+0

是right.then你有我認爲使用'android.os.Debug.MemoryInfo' – 2012-04-09 11:15:03

回答

4

用於獲取所有正在運行的進程的PSS值: 使用本:

ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); 
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"); 
    } 
} 

,或者您也可以使用運行時得到PSS值:

final Process m_process = Runtime.getRuntime().exec("/system/bin/top -n 1"); 
    final StringBuilder sbread = new StringBuilder(); 
    BufferedReader bufferedReader = new BufferedReader(new 
InputStreamReader(m_process.getInputStream()), 8192); 
+0

非常感謝你也試過......我看到的第一個例子中的另一個問題爲好。你是否建議我總結「getTotalPss()」的輸出? 「dalvikPss」中的價值是什麼?大多數消息來源都建議使用該值 第二個答案涉及啓動一個控制檯嗎? – 2012-04-09 11:25:27

+0

@HeshanPerera:我有單獨獲得PSS價值爲每個進程再總結up.and第二裝置不啓動控制檯是vsible到user.we只是運行在後臺此命令 – 2012-04-09 11:31:38

+0

再次感謝您這兩種方式。後者我現在明白的陳述。但是我不明白第一種方法是,我總結哪個值?你從三個不同的功能輸出嗎?在這三項職能中,我總結了哪些? – 2012-04-09 11:37:58

相關問題