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就可以操作界面了。

(这里是结束)

相关推荐
Kapaseker10 分钟前
Kotlin 相等的奥义
android·kotlin
Lyyaoo.12 分钟前
【MySQL】锁机制
android·数据库·mysql
DS随心转插件22 分钟前
DeepSeek 代码手机端导出与 AI 辅助方案实测
android·人工智能·chatgpt·智能手机·deepseek·ai导出鸭
烛衔溟26 分钟前
HarmonyOS 基础 UI 构建 —— 组件、布局与沉浸式效果
ui·华为·harmonyos
JohnnyDeng9435 分钟前
【Android】Flow vs LiveData:选型指南与迁移实践
android·kotlin·livedata·flow
plainGeekDev39 分钟前
线程安全集合 → 协程安全替代
android·java·kotlin
zhangphil40 分钟前
Kotlin管道Channel构造函数参数capacity值RENDEZVOUS与UNLIMITED
android·kotlin
plainGeekDev1 小时前
Timer → Coroutines
android·java·kotlin
Coffeeee1 小时前
Android17应用内存限制--App:我人不舒服,系统:那你走吧
android·google·kotlin
问心无愧05131 小时前
ctf show web入门101
android·前端·笔记