2016-09-16 64 views
-3

阅读很多overkilled,overcomplicated在这里的SO解决方案,对于这样一个简单的问题,如何从工作线程访问主线程,执行一些代码。如何从Java中的工作线程访问主线程?

在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 
    }); 
}); 
+3

可能[从另一个线程主线程中运行代码]的副本(http://stackoverflow.com/questions/11123621/running-code-in-main-thread-from-an其他线程) – Augusto

+2

您的问题中的任何链接都与Android没有任何关系。 – CommonsWare

回答

0

在Android中,你不能直接访问主线程(UI线程),但你可以在上面排队的工作,所以你需要创建一个Handler并使用该处理后的主要工作(Runnable)线。

下面是如何可以在UI Thread使用Handler

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桌面应用程序

+0

您不需要创建'Handler',因为任何'View'都可以使用'post()',并且通常您可以访问其中的一个。 – CommonsWare

+0

多数民众赞成在其他解决方案 –

+0

@CommonsWare他的问题是如何从工作线程访问主线程,所以我认为他没有访问任何视图 –

-1

从另一个运行你的主线程代码完全不同:

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

希望这有助于

+0

好奇为什么downvote?说明?例如,此代码可以很好地改变AsyncTask的'doInBackground()'方法中UI的状态。这不是“正确”的方式吗? – ShadowGod

相关问题