当我在主线程中发布了长期运行的Runnable时,为什么在那个时候它没有被阻塞?

时间:2018-09-09 07:26:55

标签: android multithreading

如果我使用Runnable命令发布Thread.sleep(10000),如果UI线程一次只能执行一条消息,为什么系统运行正常?

我在主要活动中创建了此线程。由主线程MessageQueue处理按钮单击,然后如果h.post()中的可运行对象当前在主线程上处于活动状态,那么如何处理按钮单击?他们不应该在MessageQueue中等待吗?

new Thread(new Runnable() {
            public void run() {
                for(int ii=0;ii<9;ii++){
                    i++;
                    try
                    {
                        Thread.sleep(1000);
                        h.post(new Runnable(){

                                @Override
                                public void run()
                                {
                                    t();
                                    // TODO: Implement this method
                                }
                            });
                    }
                    catch (InterruptedException e)
                    {}
                }
            }
        }).start();

2 个答案:

答案 0 :(得分:0)

final Runnable r = new Runnable() {
    public void run() {
       Thread.sleep(10000); 
       //the thread stoped/sleeped is the thread of Runnable belongs to, 
       //but not the Main UI thread
    }
};

不阻止主用户界面正是Runnable想要实现的目标

答案 1 :(得分:0)

这是一个非常琐碎的问题。内部Runnable位于主线程上,而外部Runnable很耗时。因此,内部.ghw不会阻止UI线程。谢谢!