我已經寫了一些代碼來計算Android設備上的CPU負載通過閱讀proc/stat中的第一行,大多數時間工作正常,除了它一次又一次地返回負值我意識到,空閒時間值有時下降,我創建了一個虛擬運行的類來演示此行爲:proc/stat空閒時間減少
public class MyRunnable implements Runnable{
String[]cpuTimeInfo;
long idle2;
long idle1;
@Override
public void run() {
if (new File("/proc/stat").exists()) {
try{
BufferedReader br = new BufferedReader(new FileReader(new File("/proc/stat")));
String aLine;
while ((aLine = br.readLine()) != null){
if(aLine.substring(0, 3).equals("cpu")){
cpuTimeInfo = aLine.split("\\s+");
idle1 = Long.parseLong(cpuTimeInfo[4]);;
try{
Thread.sleep(1000);
br = new BufferedReader(new FileReader(new File("/proc/stat")));
aLine = br.readLine();
cpuTimeInfo = aLine.split("\\s+");
}
catch(InterruptedException e){
}
idle2 = Long.parseLong(cpuTimeInfo[4]);;
if(idle2 < idle1)
Log.d("????", "Idle 1: " + idle1 + " Idle 2: " + idle2);
break;
}
}
if (br != null) {
br.close();
}
}
catch (IOException | NumberFormatException e){
}
}
new Thread(this).start();
}
}
- 可有人請向我解釋,這怎麼可能。
- 是否有適當的解決辦法或真正解決這個問題
沒有解決問題,而是'Thread.sleep(1000)',你可以使用'TimeUnit.SECONDS.sleep(1L)';也可以使用'.split(「\\ s +」)':創建一個'private static fnal Pattern SPACES = Pattern.compile(「\\ s +」)'並使用'SPACES.split()'。最後,使用'ExecutorService'而不是'Thread'。 – fge
@fge好的,我會的,謝謝 – Kakarot