在一周的时间里,我有什么方法可以查看每个应用程序使用多少CPU?我能想到的唯一方法是反复解析顶部输出,但这似乎不是最有效的方法。还有更好的方法吗?
添加一些上下文,基本上是手机上SDK的traceview功能:http://developer.android.com/guide/developing/debugging/debugging-tracing.html
答案 0 :(得分:0)
我们解析了顶级输出,想不到更好的方法。我们需要监控所有应用程序,只有当您需要有关自己的信息时,跟踪才有用,因为您必须向应用程序添加跟踪代码才能使用它。
该应用程序每秒运行一次,消耗5%的CPU,聚合值,将值写入日志文件,并在屏幕上显示结果。
不幸的是,代码尚未打开。
答案 1 :(得分:0)
在这段时间内,您面临监控过程的一个问题是,在这段时间内,它们几乎肯定会被摧毁并创建很多次 - 这使得很难获得有用的数据。
如果您不是“重新发明轮子”类型 - 流行的SystemPanel应用程序的免费版本显示每个进程使用了多少CPU时间(以及在什么时间段内) - 完整版本显然提供了两者的详细历史记录CPU和内存使用情况。
答案 2 :(得分:-1)
您可以使用Debug类来监控流程
或使用此函数计算CPU使用率
使用/proc/stat/
获取总CPU使用率(适用于所有CPU)。对于每个进程的使用
private float readCpuUsage(int pid) {
try {
RandomAccessFile reader = new RandomAccessFile("/proc/" + pid + "/stat", "r");
String load = reader.readLine();
String[] toks = load.split(" ");
long idle1 = Long.parseLong(toks[5]);
long cpu1 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4])
+ Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);
try {
Thread.sleep(360);
} catch (Exception e) {}
reader.seek(0);
load = reader.readLine();
reader.close();
toks = load.split(" ");
long idle2 = Long.parseLong(toks[5]);
long cpu2 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4])
+ Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);
return (float)(cpu2 - cpu1) / ((cpu2 + idle2) - (cpu1 + idle1));
} catch (IOException ex) {
ex.printStackTrace();
}
return 0;
}
获取正在运行的进程列表
ActivityManager mgr = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> allTasks = mgr.getRunningTasks(showLimit);
/* Loop through all tasks returned. */
for (ActivityManager.RunningTaskInfo aTask : allTasks)
{
Log.i("MyApp", "Task: " + aTask.baseActivity.getClassName());
}