繁体   English   中英

如何从Java中的工作线程访问主线程?

[英]How to access main thread from worker thread in Java?

在 SO 中阅读许多过度使用过于复杂的解决方案,对于这样一个简单的问题,如何从工作线程访问主线程,在其上执行一些代码。

在 iOS 中dispatch_get_main_queue()方法返回主线程。 在Java中如何?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0UL), ^{
    //do background thread stuff

    dispatch_async(dispatch_get_main_queue(), ^{
        //update UI
    });
});

在 Android 中,您不能直接访问主线程(UI 线程),但可以在其上排队作业,因此您需要创建一个Handler并使用该处理程序在主线程上发布作业( Runnable )。

下面是一个示例,说明如何使用HandlerUI ThreadUI Thread

new android.os.Handler(Looper.getMainLooper()).post(new Runnable() {
      @Override
      public void run() {
        //Doing job here
      }
    })

并且正如评论中提到的@CommonsWare ,还有另一种访问UI线程的方法:

  • 如果你有任何View实例,你可以使用View.post(Runnable)
  • 如果你有Activity实例,你可以使用Activity.runOnUiThread(Runnable)

顺便说一句,在 Android 中访问主线程与 Java 桌面应用程序完全不同

从另一个主线程上运行您的代码:

runOnUiThread(new Runnable() {
        @Override
        public void run() {
           // Your code here
        }
});

希望这可以帮助

暂无
暂无

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

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