第二次启动活动时,处理程序无法刷新视图

时间:2013-11-01 08:09:01

标签: android refresh handler

首先,我启动ActivityB并点击getUdpMsg按钮。 Handler将收到消息并刷新用户界面。

然后,我返回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());
                }
            }
        }
    };

1 个答案:

答案 0 :(得分:0)

我没有足够的声誉对您的问题发表评论,所以我必须回答一下。

两个问题:

  1. 您确定该消息是否真的第二次发送了吗?
  2. 如果是,我认为它是在另一个线程中发送的,是第二次启动的线程吗?
  3. 我曾经遇到过同样的问题。它出现在我完成我创建的线程(比如它叫做MyThread)后,MyThread被终止了。所以下次我通过MyThread.run()“调用”它时,作品在MainThread中运行。

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

    修改

    要确保创建MyThread,请使用Thread.start()代替Thread.run()

    希望这会有所帮助(: