2016-09-16 5 views
-3

このような簡単な質問、ワーカースレッドからメインスレッドにアクセスして、その上でコードを実行する方法については、多くのoverkilled,overcomplicatedの解をここで読むことができます。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

アンドロイドでは、直接メインスレッド(UIスレッド)にアクセスすることはできませんが、Handlerを作成し、メインのジョブ(Runnable)を投稿することハンドラを使用する必要があるので、あなたは、その上のジョブをキューに入れることができます糸。もしあれば

  • :以下

    は、あなたがコメントで述べた@CommonsWareとしてもHandler

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

    とを使用してUI Threadに投稿することができる方法の一例であり、UIスレッドにアクセスするための別の方法があります任意のViewのインスタンスを持つView.post(Runnable)

  • インスタンスがActivityの場合はを使用できます

ところでアンドロイドのメインスレッドは、Javaデスクトップアプリ

+0

'Handler'を作成する必要はありません。' post() 'は' View'でも利用可能で、通常はそれらのうちの1つにアクセスできます。 – CommonsWare

+0

他の解決策の1つです。 –

+0

彼の質問はどのようにワーカースレッドからメインスレッドにアクセスするのですか?彼はどのビューにもアクセスできないと思いました –

-1

他からメインスレッド上でコードを実行するよりも全く異なるアクセス:

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

ホープこれは

+0

好奇心が強いのはなぜですか?説明?このコードは、例えばAsyncTaskの 'doInBackground()'メソッドでUIの状態を変更するためにうまく動作します。これは「適切な」方法ではありませんか? – ShadowGod

関連する問題