我已经有了这个代码来经常安排任务:
final Handler handler = new Handler();
Runnable update = new Runnable() {
@Override
public void run() {
try{
runOnUiThread(new Runnable(){
public void run(){
lbl.setText(info);
cpb.setProgress(Float.valueOf(textInfo);
}
});
handler.postDelayed(this, 1000);
}
catch (Exception e) {
// TODO: handle exception
}
}
};
我想不断更新UI(每秒等)。然而,代码工作,界面开始滞后。在代码迭代任务几次后,接口停止响应。
有没有什么方法可以安排任务定期重复而不会使内存过载并且没有接口滞后。
答案 0 :(得分:3)
假设lbl
是TextView
且cpb
是ProgressBar
,您的代码将不会显着落后于任何设备。问题出在其他地方。此外,您似乎错过了(Float.valueOf(textInfo);
上的结束括号。
顺便说一下,你从我能看到的内容中不必要地使用了Runnable中的runOnUiThread
。当您创建new Handler()
时,它隐式链接到调用线程的Looper
,我假设是UI线程。在这种情况下,update
Runnable已经在UI线程上运行。编辑:这不应该是记录延迟的原因,因为iirc runOnUiThread
检查它是否在UI线程上执行然后立即运行它,而不做另一个帖子。