2

ここで提案されているように、dalvikPss 値を使用して、実行中の各アプリケーションとサービスの相対的なメモリ使用量を見つけようとしています

そこで提案されているように、実行中のプロセスのすべての PSS 値を合計する必要があります。私の質問は、実行中のすべてのプロセスの pss 値を取得するにはどうすればよいですか?

私の理解では、Android のサービスとタスクはプロセスにリンクされています。この理解は正しいですか?

もしそうなら、から返されたすべてのプロセスの PSS 値を合計すると、ActivityManager.getRunningAppProcesses実行中のすべてのプロセス (サービスとタスクを含む) の合計 PSS が得られますか?

4

1 に答える 1

5

実行中のすべてのプロセスの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);
于 2012-04-09T11:17:09.687 に答える