我有这段代码可以每隔一段时间安排一个任务:
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(每秒等)。代码有效,但是,界面开始滞后。代码迭代任务几次后,界面停止响应。
有什么方法可以安排任务定期重复,而不会使内存过载并且界面不会滞后。
最佳答案
假设 lbl
是一个 TextView
而 cpb
是一个 ProgressBar
,您的代码不会明显滞后于任何设备事实上。问题出在其他地方。此外,您似乎错过了 (Float.valueOf(textInfo);
。
顺便说一句,据我所知,您不必要地在 Runnable 中使用了 runOnUiThread
。当您创建一个 new Handler()
时,它会隐式链接到调用线程的 Looper
,我假设它是 UI 线程。在这种情况下,update
Runnable 将已经在 UI 线程上运行。编辑:这不应该是记录滞后的原因,因为 iirc runOnUiThread
检查它是否正在 UI 线程上执行,然后立即运行它,而不做另一篇文章。
关于Android - 定期有效地安排任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095775/