我正在尝试使用top命令收集 Android 应用程序的 CPU 负载信息。虽然下面的代码提供了预期的输出,但顶部间隔应以(默认)3 秒的间隔更新其读数。然而,从 BufferedReader 读取时,每 3 秒会记录相同的输出。如果我将进程的运行时间包含在顶部的输出中,它也不会改变。所以看起来我只是一遍又一遍地获得每个间隔第一次运行的输出。
更新:看来上述问题只能在模拟器上重现。在物理设备上,顶部更新的 CPU 读数会在每个时间间隔内正确更新。
我尝试的另一件事是让 top 仅运行一次并收集该输出。虽然这有效,但启动 top 命令的开销看起来会扭曲读数。
我也很惊讶我没有找到现成的代码。既然对 /proc 目录的访问已受到限制,是否有更好的方法来检查应用程序的 CPU 负载?ps命令还提供 cpu 负载,但这提供了进程整个生命周期内运行所用时间的百分比,这是一个不太有用的值。
private void startCollecting() {
Thread thread = new Thread() {
@Override
public void run() {
try {
ProcessBuilder builder = new ProcessBuilder("top", "-q", "-oCMDLINE,%CPU", "-s2", "-b");
Process process = builder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
Log.d(TAG, line);
processStatsLine(line);
}
reader.close();
BufferedReader err_reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((line = err_reader.readLine()) != null) {
Log.e(TAG, line);
}
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread.start();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
932 次 |
| 最近记录: |