2017-08-24 83 views
0

到目前爲止,這個主題已經討論了很多次,但仍然沒有得到它的工作。發送到UI線程的消息永遠不會到達

MainActivity有一個叫Handler mHandlerUi;財產中它的構造函數初始化

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

後來在代碼中,在另一類,施工時間我初始化另一個處理器性能

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

所以在線程的生命週期中,下面的代碼片斷會被執行X次。

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

    mHandlerToUi.sendMessage(msg); 

不幸的是,從未收到郵件在MainActivity的活套,這兩個線程使用相同的用戶界面的尺蠖,

缺少什麼我在這裏?

回答

1

如果我正確理解你,你已經啓動了兩個處理程序,並且你想將消息從一個傳遞給另一個?

也許你應該把處理程序傳遞給第二類。因此,在您MainActivity你有

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

,並通過構造函數或setter方法傳遞這個mHandler你的第二個類。

+0

這正是我試圖做的,但爲什麼我需要共享處理器的類之間的參考,而不是它的活套很好的答案?有沒有辦法達到同樣的效果是,如果我會使用DuplicateHandle(c語言) –

+0

Kevinrob回答了你的問題,什麼阻止你傳遞處理程序參考? – qichuan

1

每個Handler處理其消息。 Looper用於在特定的Thread上運行Handler

如果您創建兩個Handler,則不會進行通信。只會在Thread上共享相同的Looper

你可以找到What is the relationship between Looper, Handler and MessageQueue in Android?

+0

So Looper只是其他實例中的隊列管理,但通信本身是由Handler完成的? –

+1

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

相關問題