2017-08-24 23 views
0

このトピックはこれまで何度も議論されていますが、まだ管理していません。マイMainActivityUIスレッドに送信されたメッセージは到着しません。

は、建設期間中に、別のクラスでは、コード内の

mHandlerUi = new Handler() { 
      @Override 
      public void handleMessage(Message msg){ 
       onMessageArrive(msg); 
      } 
     }; 

その後、コンストラクタで初期化されHandler mHandlerUi;と呼ばれる性質を持っている私は別のハンドラのプロパティを初期化する

mHandlerToUi = new Handler(Looper.getMainLooper());

スレッドの存続期間中、次のコードスニペットがX回実行されます。私はこっちに行方不明です何

Message msg = mHandlerToUi.obtainMessage(); 
    msg.what = ConstMessages.MSG_NEW_GPS_POINT; 
    msg.setData(bundleContet); 

    mHandlerToUi.sendMessage(msg); 

は残念ながらメッセージは、両方のスレッドが同じUIのルーパーを使用して、

をMainActivityのルーパーを到着したことがありませんか?

答えて

1

あなたが正しく理解していれば、2つのハンドラを開始し、メッセージを1つから別のものに渡したいと思いますか?

ハンドラを2番目のクラスに渡す必要があります。だからあなたのMainActivityであなたは

mHandler = new Handler(Looper.getMainLooper()) { 
     @Override 
     public void handleMessage(Message inputMessage) { 
      onMessageArrive(msg); 
     } 
    } 

を持っているし、コンストラクタやセッターメソッドを介して、あなたの第二のクラスにこのmHandlerを渡します。

+0

このまさに私が何をしようとしているが、私はクラス間のハンドラのリファレンスを共有する必要が来るか、とないそのルーパーの良い答えを見つけることができますか? DuplicateHandle(C言語)を使用する場合、同じ効果を達成する方法はありますか? –

+0

Kevinrobはあなたの質問に答えてくれました。何がハンドラ参照を渡すのを止めますか? – qichuan

1

Handlerがメッセージを処理します。 Looperは、特定のThreadHandlerを実行するために使用されます。

Handlerを2つ作成すると、通信できません。 Threadで実行される同じLooperだけを共有します。

あなたはWhat is the relationship between Looper, Handler and MessageQueue in Android?

+0

したがって、Looperは他のインスタンスのキュー管理に過ぎませんが、通信自体はハンドラによって行われますか? –

+1

@igalk [this](https://blog.mindorks.com/android-core-looper-handler-and-handlerthread-bd54d69fe91a) – pskink

関連する問題