android开发:子线程更新UI界面

多线程操作经常希望在子线程更新界面,这样方便调试,但是,但是经常这样做程序就不对劲了,为什么呢?因为为了保证界面流畅,不允许在非UI线程直接操作界面,只能通过一些专门途径进行。另外,像网络操作这种可能阻塞的调用也不允许在UI线程执行,会触发异常。

最标准的方案是这样的:

在Ui线程的类里面定义Handler:

java 复制代码
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 100) {
                String res = (String) msg.obj;
                binding.textviewFirst.append(res+"\n");
            }
        }
    };

操作界面的是这一句:

java 复制代码
binding.textviewFirst.append(res+"\n");

在子线程的类里面定义Handler变量并在构造函数赋值:

java 复制代码
    Handler handler;

    public myThread(Handler h) {
        handler = h;
    }

创建线程的时候当然要用Handle作为参数。

在子线程里调用Handler:

java 复制代码
    private void Log(String str) {
        Message msg = new Message();
        msg.what = 100;  //消息发送的标志
        msg.obj = str;
        handler.sendMessage(msg);
    }

直接写成了方法,通过Handler就可以操作界面了。

(这里是结束)

相关推荐
2501_915909061 小时前
Ipa Guard 防护上架,混淆、重签名和回归测试怎么做
android·ios·小程序·https·uni-app·iphone·webview
码点2 小时前
Android ANR 全解析 与 traces 分析实战
android
敲代码的瓦龙2 小时前
Jetpack?lifecycle!!!
android·kotlin
苦瓜花2 小时前
Hilt用使用及原理
android
深度学习04074 小时前
MySQL InnoDB Cluster 部署完整文档
android·mysql·adb
邪修king4 小时前
Re:Linux系统篇(三十七):进程间通信Chapter4:System V 共享内存深度解析:为什么它是最快的 IPC?
android·linux·运维
用户337922545685 小时前
Kiora SDK:在 Android 上组织端侧模型、工具与 A2A 协作
android
洞见前行5 小时前
你在 XML 时代学的渲染优化,进了 Compose 大多不再是重点——Recomposition 才是新的战场
android
ii_best5 小时前
按键精灵手机助手 v5.2.1 实测:inputText 逐字延时 + 调试面板多行复制,安卓脚本开发的两个输入痛点一次解决
android·开发语言·智能手机·自动化·ai编程·按键精灵
hunterandroid5 小时前
OkHttp 源码解析:拦截器链、连接池与缓存策略的设计精髓
android