0

首先,我启动ActivityB并单击getUdpMsg按钮。将Handler收到消息并刷新 UI。

然后,我回到ActivityA,再次启动ActivityB,并单击相同的按钮。但是,UI 不会刷新。

但是 UI setText 从日志中成功。

为什么?

public Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 1) {
                receiveMsg = udpSocketReceive.receiveMsg;
                Log.d("test", "receive = " + receiveMsg);

                // 解析接收到的消息
                messageReceive = new MessageReceiveUDP(receiveMsg);

                messageReceive.parseUDPRecvMsg();

                if (!messageReceive.isValid()) {
                    Log.e("Error", "The received msg is invalid");
                } else {
                    Log.d("testt", "valid msg");
                    // 解析的结果显示在UI上
                    udpreceiveflag = true;
                    // udpSocketReceive.setLife(false);
                    setResultOnUI(messageReceive);
                    (new View(context)).invalidate();
                    Log.d("debug","after invalidate ip = " +chabanipTextView.getText().toString());
                }
            }
        }
    };
4

1 回答 1

0

我没有足够的声誉来评论你的问题,所以我必须回答。

两个问题:

  1. 您确定该消息是否真的在第二次发送?
  2. 如果是,我想它是在不同的线程中发送的,线程是在第二次启动的吗?

我曾经遇到过同样的问题。结果是在我完成了我创建的线程(比如说它称为 MyThread)的工作之后,MyThread 被终止了。所以下一次我“调用”它时MyThread.run(),作品在 MainThread 中运行。

解决方案很简单,确保再次创建 MyThread。

编辑

要确保创建了 MyThread,请使用Thread.start()而不是Thread.run().

希望这可以帮助 (:

于 2013-11-11T02:28:54.463 回答