从普通线程调用在ui线程上运行时,主线程做什么?

时间:2019-05-29 10:33:45

标签: android

我注意到在动画过程中调用了主循环程序,如果ui线程做的是劳动密集型工作,则跳过某些动画。解决此问题的一种方法是运行一个线程或可运行或可调用的线程,然后将它们加入ui线程(自动进行可调用,并通过调用在ui线程上运行来手动进行)。

但这是否意味着ui线程可能在重要的事情期间被线程中断? 即,如果线程返回一些数据,但是ui在更新旧数据时正在使用旧数据。还是在ui线程上运行以更新数据之前,线程是否等待下一个主循环程序?

我不是在问如何避免2个线程做2个类似的事情,而是在调用ui线程上运行时是否特别中断了主线程。或等待它完成(例如动画的行为方式,跳帧,但是当主线程完成时,动画会继续平稳进行,除非再次进行更费劲的工作)

2 个答案:

答案 0 :(得分:0)

Uncaught ReferenceError: dfds is not defined 的工作方式

  

在UI线程上运行指定的操作。如果当前线程是   UI线程,然后立即执行操作。如果当前   线程不是UI线程,操作已发布到事件队列   UI线程。

因此,要通过使用您发布的场景来理解它,其工作原理类似于,主线程将执行其正在处理的当前事件,并将您的事件添加到UI线程的事件队列中。

答案 1 :(得分:0)

尝试一下:-

runOnUiThread (new Thread(new Runnable() {  
        public void run() {
            while(i++ < 1000){
                btn.setText("#"+i);
                try {
                    Thread.sleep(300);
                } 
                catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
         }
    }));