到目前为止,该主题已经多次讨论过,但仍然没有得到管理。
我的MainActivity
有一个名为Handler mHandlerUi;
的属性,在其构造函数中初始化
mHandlerUi = new Handler() {
@Override
public void handleMessage(Message msg){
onMessageArrive(msg);
}
};
稍后在代码中,在另一个类中,在构造期间我初始化另一个Handler属性
mHandlerToUi = new Handler(Looper.getMainLooper());
因此,在线程的生命周期中,以下代码片段执行X次。
Message msg = mHandlerToUi.obtainMessage();
msg.what = ConstMessages.MSG_NEW_GPS_POINT;
msg.setData(bundleContet);
mHandlerToUi.sendMessage(msg);
不幸的是,消息永远不会到达MainActivity的Looper,两个线程都使用相同的UI的looper,
我在这里错过了什么?
答案 0 :(得分:1)
如果我理解正确,你已经启动了两个处理程序,并且你想将消息从一个传递到另一个?
也许您应该将处理程序传递给第二个类。所以在MainActivity
你有
mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message inputMessage) {
onMessageArrive(msg);
}
}
并通过构造函数或setter方法将此mHandler
传递给您的第二个类。
答案 1 :(得分:1)
每个Handler
处理其邮件。 Looper
用于在特定Handler
上运行Thread
。
如果您创建了两个Handler
,则无法进行通信。只会共享Looper
上运行的相同Thread
。
您可以在What is the relationship between Looper, Handler and MessageQueue in Android?
上找到好的答案