发送到UI线程的消息永远不会到达

时间:2017-08-24 06:26:35

标签: java android multithreading

到目前为止,该主题已经多次讨论过,但仍然没有得到管理。

我的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,

我在这里错过了什么?

2 个答案:

答案 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?

上找到好的答案