关于Android如何在子线程中更新UI

本文记录了使用Android Room框架进行数据库查询并实时更新UI时遇到的问题及解决方案。通过使用Handler异步机制,避免了在子线程直接更新UI导致的程序崩溃,确保了应用程序的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前老师一直有提到这个不过一直在学其他的东西就没怎么注意

今天写Room框架增删改查的时候在查询这一步实时更新ui卡壳了,数据一显示程序直接崩溃

查了一下发现是不能直接在子线程里更新ui的

然后用了Handler异步机制的方法处理

在主线程添加

private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    // 在这里可以进行UI操作
                    tvResult.setText(sb.toString());
                    break;
                default:
                    break;
            }
        }
    };

在这里插入图片描述
子线程这样写

public void query() {
        new Thread() {
            @Override
            public void run() {
                List<Student> students = studentDao.getAll();
                sb = new StringBuffer();
                for (Student student : students) {
                    Log.d("TAG", String.format("query:user[%d,%s,%s,%s]", student.sid, student.sno, student.sname, student.sex));
                    sb.append(student.sid).append("\t\t\t").append(student.sno).append("\t\t\t")
                            .append(student.sname).append("\t\t\t").append(student.sex).append("\r\n");
                }
//                tvResult.setText(sb.toString());
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);
            }
        }.start();

    }

在这里插入图片描述
记录一下,估计没人看得懂,毕竟我什么都菜的一笔,手动狗头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值