当前位置: 首页 > 知识库问答 >
问题:

RunOnUiThread无法直接访问消息

洪飞白
2023-03-14

我正在向与它自己的Thread相关联的Handler发送消息。在handleMessage方法中,我尝试使用runOnUiThread使用消息的内容更新UI。如果从handleMessage中获取消息obj参数并将其分配给一个新的最终变量,这很好。但是如果我不使用此赋值并直接在runnable中msg.obj,则obj变量为空,即使在调用runOnUiThread之前检查传递给handleMessage的msg引用时msg引用具有相同的id。

为什么会发生这种情况?

这是工作:

bt01.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
         Message msg = new Message();
         msg.obj = new Data("Hi im the message");
         mHandler.sendMessage(msg);
     }
 });

class LooperThread extends Thread {
     public void run() {
        Looper.prepare();
        mHandler = new Handler() {
            public void handleMessage(final Message msg) {
                final Object messageString = msg.obj;
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv01.setText(((Data)messageString).getMessage());
                    }
                });
            }
        };
        Looper.loop();
    }
}

这不起作用:

public void handleMessage(final Message msg) {                    
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv01.setText(((Data)msg.obj).getMessage());
                    }
                });
            }

共有1个答案

吕俊才
2023-03-14

我的猜测是,操作系统正在重用这些消息对象,而不是创建新对象。当<code>Runnable获得消息()的存在支持了这一假设。

 类似资料:
  • 这是运行命令后发生的情况: 启动:pid=4346 port=27017 dbpath=/var/lib/mongodb/data/db 64位host=era-inspiron-5559 2017-02-12T14:39:18.644+0530 I CONTROL[initandlisten]db版本v3.4.2 2017-02-12T14:39:18.644+0530 I控件[initandl

  • 我面临着python selenium的问题,我输入了下面的代码,几分钟前它运行良好,但现在说chrome不可访问请帮助! 后果 编辑 当我尝试这段代码时,它确实起作用,但我不知道为什么它突然起作用。有人能解释一下这段代码吗?

  • 问题内容: 到目前为止,我们使用了几个Linux用户: system_foo @ server system_bar @服务器 … 我们希望将系统用户放入docker容器中。 linux用户->容器 服务器内部的更改没有问题,但是远程系统使用这些用户向我们发送数据。 我们需要工作。远程系统无法更改。 如果每个linux操作系统只有一个系统(将端口22传递到容器),我将非常容易。但是有几个。 我们如

  • 我用和创建了一个web应用程序,如果打开登录页面,然后登录,然后依次进入管理模块或报告模块,一切都很好。 当我在浏览器中键入url(需要进行身份验证,但我可以在自定义筛选器中打开所有权限)时,就会出现proleam,页面加载时没有js和CSS。在调试模式下,我看到意外地被放入路径中,如下所示。如果访问,我就可以获得资源。

  • 有趣的是,当我使用https://developer.microsoft.com/en-us/graph/graph-explorer时,我可以获得用户的电子邮件。我已经检查了查询,但似乎没有任何区别。我看到的唯一区别是,在调查AAD-->企业应用程序-->权限时,我可以在Graph Explorer应用程序中看到用户同意权限,但在我的应用程序中看不到。

  • 问题内容: 我正在尝试直接为嵌入式Linux项目访问物理内存,但是我不确定如何最好地指定使用的内存。 如果我定期引导设备并访问/ dev / mem,则可以轻松地对其几乎任何位置进行读写。但是,在这种情况下,我正在访问可以轻松分配给任何进程的内存。我不想做 我的/ dev / mem代码是(删除了所有错误,等等。): 这可行。但是,我想使用没有其他人会碰到的内存。我尝试通过使用mem = XXXm