2016-09-28 4 views
0
Handler mainHandler = new Handler(MainActivity.context.getMainLooper()); 
mainHandler.post(new Runnable() { 
    @Override 
    public void run() { 

     // .. some code     
    } 
}); 

通常、私はワーカースレッドからRunnableを開始しますが、メインスレッドから呼び出されることがあります。あなたはそれにいかなる否定的な副作用があると思いますか?メインスレッドの開始スレッドはメインスレッドから投稿されましたか?

答えて

4

あなたはスレッドを開始していません。メインルーパーにハンドラを付けて実行するコマンドを送信しています。別のスレッドから呼び出されたときとまったく同じ効果があります。

+0

通常の「メソッド呼び出し」が実行されたときに、メインからメインに比較して、このような「実行可能」を「遅延」していますか? –

+1

@Jánosはい、それらのランナブルはキューに追加されます。それ以前に実行したことの後に実行されます – Kiskae

-1

ハンドラは、別のスレッドにメッセージを送信する必要がある場合に使用します。 メインスレッドでハンドラを作成すると、バックグラウンドスレッドからメインスレッドにメッセージを送信できます。 新しいinner staticクラスを作成すると、Hadnlerが拡張され、WeakReference varがActivityに宣言されます。

0
  1. Handlerは、実行可能ファイルを添付したルーパーに送信します。 Runnableは単なるコードセグメントであり、ルーパーが動作しているスレッドで呼び出されます。この状況では、ここのルーパーはMainLooperであり、実行可能ファイルはMainThreadで呼び出されます。

UIコンポーネントを更新したいときはいつでも、実行スレッドをメインスレッドに投稿する必要があります。

  1. この "MainActivity.context"のようにMainActivityで静的フィールドを宣言するだけでは十分ではないと思います。
+0

'' MainActivity.context "。私はいつも異なる方法を呼び出すときに文脈がいつも必要なのか疑問に思っています。 iOSでは類似の動物は存在しません。ですから、私はどこのコンテキストでも、 "" MainActivity.context ""が必要です。 –

+0

MainActivity.contextは何を参照していますか?あなたのアプリケーションまたは主な活動 – Bennyhuo

+0

'context = getApplicationContext(); ' –

関連する問題