理解できない
CPU負荷を取得してからテキストビューに設定するバックグラウンドスレッドがあります
問題は、setText() メソッドが実行されると、UI が一瞬フリーズすることです。UI の他の要素をスクロールするときにそれを感じることができます
Runnable runnable = new Runnable() {
@Override
public void run() {
while(thread) {
try {
RandomAccessFile reader = new RandomAccessFile("/proc/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]);
fLoad = (float)(cpu2 - cpu1) / ((cpu2 + idle2) - (cpu1 + idle1));
} catch (IOException ex) {
}
final int load =(int) (fLoad*100);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
mHandler.post(new Runnable() {
@Override
public void run() {
setCpuLoad(load);
}
});
}
}
};
new Thread(runnable).start();
}
.
private final void setCpuLoad(int load){
cpuLoad.setProgress(load);
cpuLoadTxt.setText(load+"%");
}
私は多くのことを試しましたが、最終的に問題が setText() にあることがわかりました。コメントするとUIがスムーズになるからです