我听不懂
我有一个后台线程,它获取 CPU 负载,然后将其设置为 TextView
问题是当执行 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 很流畅
最佳答案
检查您在哪个线程中创建处理程序。 您应该在主(UI)线程上执行此操作。
关于java - setText ("test") 正在卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14710458/