2012-04-09 8 views
1

Ich versuche, die relative Speichernutzung jeder laufenden Anwendung und Service mit dem dalvikPss Wert zu finden, wie here vorgeschlagenAndroid: Wie Gesamt PSS alle laufenden Prozesse bekommen

Da es vorgeschlagen, ich brauche alle zusammenzufassen die PSS-Werte laufender Prozesse. Meine Frage ist, wie bekomme ich die Pss-Werte aller laufenden Prozesse?

Mein Verständnis ist, dass Dienste und Aufgaben in Android mit Prozessen verknüpft sind. Ist dieses Verständnis korrekt?

Wenn ja, würde die Summe der PSS-Werte aller Prozesse zurückgegeben von ActivityManager.getRunningAppProcesses geben Sie mir die gesamte PSS aller laufenden Prozesse (Dienstleistungen und Aufgaben enthalten)?

+0

habe ich nicht. Das sollte mein letzter Ausweg sein, da das Starten einer Konsole aus der Anwendung einige schlechte Auswirkungen auf die Leistung haben kann, oder? Und abgesehen von diesem Ziel möchte ich auch wissen, ob mein Verständnis, dass Prozesse Dienste und Aufgaben darstellen, korrekt ist. Hast du irgendwelche Gedanken dazu? –

+0

ja right.then Sie haben glaube ich auch versucht mit 'android.os.Debug.MemoryInfo' –

Antwort

4

für PSS-Werte aller laufenden Prozesse erhalten: Verwendung dieses:

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"); 
    } 
} 

oder Sie können auch PSS Wert mit Runtime erhalten:

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

Vielen Dank ... Ich sah das erste Beispiel in einer anderen Frage. Schlägst du vor, dass ich die Ausgabe von "getTotalPss()" summiere? Was ist mit dem Wert in "dalvikPss"? Die meisten Quellen schlagen vor, diesen Wert zu verwenden. Die zweite Antwort beinhaltet das Starten einer Konsole richtig? –

+0

@HeshanPerera: Ich habe diese zwei Möglichkeiten, um PSS-Wert getrennt für jeden Prozess zu erhalten, dann zusammenfassen.und zweiten bedeutet, nicht eine Konsole zu starten, die vsible zu Benutzer ist. Wir führen nur diesen Befehl im Hintergrund –

+0

Nochmals vielen Dank. Die letztere Aussage verstehe ich jetzt. Aber was ich mit der ersten Methode nicht verstehe, ist welcher Wert ich zusammenfasse? Sie erhalten die Ausgabe von drei verschiedenen Funktionen richtig? Welche der drei Funktionen fasse ich zusammen? –

Verwandte Themen