簡體   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