我想使用以下代码在我的Android游戏中实现一个计时器。此代码每秒后运行一定的代码。
final Handler handler = new Handler();
Runnable runable = new Runnable() {
@Override
public void run() {
try{
//task to be done
handler.postDelayed(this, 1000);
}
catch (Exception e) {
// TODO: handle exception
}
finally{
//task to be done
handler.postDelayed(this, 1000);
}
}
};
handler.postDelayed(runable, 1000);
处理程序在UI线程中创建。这样一个无限循环会阻塞线程吗?如果不是为什么不呢?
答案 0 :(得分:1)
没有循环和控制返回到处理消息队列的UI线程循环器。它不会阻止UI线程。
但是,您以其他方式拥塞UI线程。每次runnable的调用都会重新发布两次:一次在try
,第二次在finally
,因此每秒有效地使消息队列中的事件数量加倍。最终,UI线程无法做任何有用的工作来处理其他事件。