繁体   English   中英

当从普通线程(非 ui)调用在 ui 线程上运行时,主线程会做什么?

[英]What does the main thread do when run on ui thread is called from a normal thread (non ui)?

我注意到主循环器在动画期间被调用,如果 ui 线程正在做一些劳动密集型的事情,则跳过一些动画。 解决这个问题的一种方法是运行一个线程或 runnable 或 callable,然后它们加入 ui 线程(自动用于可调用,并通过调用 run on ui 线程手动)。

但这是否意味着 ui 线程可能会在其他线程重要的事情期间被中断? 即,如果另一个线程返回一些数据,但 ui 正在处理旧数据。

简短回答:主线程将完成它正在做的事情并且不会被中断,另一个线程将在主线程上发布一个带有新数据的可运行文件并继续做其他事情(如果有的话),最终主线程会运行包含来自另一个线程的新数据的 runnable。

runOnUiThread()工作原理如下

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

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

尝试这个:-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM