Java 检测特定应用程序的内存和CPU消耗

Java 检测特定应用程序的内存和CPU消耗,java,android,memory,cpu-usage,Java,Android,Memory,Cpu Usage,我想检测android中特定应用程序的内存和CPU消耗量(以编程方式),有人能帮我吗。我已经尝试了TOP方法,但我想要一个替代方法 任何帮助都将不胜感激,谢谢:)如果您想在应用程序中跟踪内存使用情况,那么就有API了 可以使用API跟踪Cpu使用情况 要获得更多关于内存使用情况的信息,请在应用程序外部使用adb shell dumpsys meminfo[-d]获取更具体的内存使用统计信息。例如,com.google.android.apps.mapsprocess的命令如下: adb shel

我想检测android特定应用程序的内存CPU消耗量(以编程方式),有人能帮我吗。我已经尝试了TOP方法,但我想要一个替代方法


任何帮助都将不胜感激,谢谢:)

如果您想在应用程序中跟踪内存使用情况,那么就有API了

可以使用API跟踪Cpu使用情况

要获得更多关于内存使用情况的信息,请在应用程序外部使用
adb shell dumpsys meminfo[-d]
获取更具体的内存使用统计信息。例如,
com.google.android.apps.maps
process的命令如下:

adb shell dumpsys meminfo com.google.android.apps.maps-d

这将为您提供以下输出:

** MEMINFO in pid 18227 [com.google.android.apps.maps] **
               Pss  Private  Private  Swapped     Heap     Heap     Heap
             Total    Dirty    Clean    Dirty     Size    Alloc     Free
            ------   ------   ------   ------   ------   ------   ------
Native Heap    10468    10408        0        0    20480    14462     6017
Dalvik Heap    34340    33816        0        0    62436    53883     8553
Dalvik Other      972      972        0        0
    Stack     1144     1144        0        0
  Gfx dev    35300    35300        0        0
Other dev        5        0        4        0
 .so mmap     1943      504      188        0
 .apk mmap      598        0      136        0
 .ttf mmap      134        0       68        0
 .dex mmap     3908        0     3904        0
 .oat mmap     1344        0       56        0
 .art mmap     2037     1784       28        0
Other mmap       30        4        0        0
EGL mtrack    73072    73072        0        0
GL mtrack    51044    51044        0        0
  Unknown      185      184        0        0
    TOTAL   216524   208232     4384        0    82916    68345    14570
(输出微调)更多信息

跟踪现代操作系统上的内存使用情况是一项非常复杂的任务。有关更多信息,请参见此项。

要获取您的processid:

int pid = android.os.Process.myPid();
要获取CPU使用率,请执行以下操作:

public String getCPUUsage(int pid) {
   Process p;
   try {
   String[] cmd = {
      "sh",
      "-c",
      "top -m 1000 -d 1 -n 1 | grep \""+pid+"\" "};
   p = Runtime.getRuntime().exec(cmd);
   String line = reader.readLine();
   // line contains the process info
}

我可以通过programmaticallyCpuStatsCollector API不是公共API的应用程序使用它吗,因此我们不能使用它,请在发布answer@Amritesh这意味着我们不能使用CpuStatsCollector?@ReflusterpointerException API未向开发人员公开。。因此,我们无法使用。您可以将此代码放在应用程序(您必须在日志中打印该行)、特定位置或广播接收器中,您可以在特定实例中触发该代码,并在控制台中检查日志。