通过处理程序的无限循环是否会阻止UI线程?

时间:2014-05-23 08:12:13

标签: android handler

我想使用以下代码在我的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线程中创建。这样一个无限循环会阻塞线程吗?如果不是为什么不呢?

1 个答案:

答案 0 :(得分:1)

没有循环和控制返回到处理消息队列的UI线程循环器。它不会阻止UI线程。

但是,您以其他方式拥塞UI线程。每次runnable的调用都会重新发布两次:一次在try,第二次在finally,因此每秒有效地使消息队列中的事件数量加倍。最终,UI线程无法做任何有用的工作来处理其他事件。