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

(这里是结束)

相关推荐
齊家治國平天下3 小时前
Android 14 Vehicle HAL (VHAL) 设计与实现深度解析
android·aaos·carservice·车载开发·android 14·vhal·vehicle hal
条tiao条7 小时前
Navigation页面跳转教学博客
ui·华为·harmonyos·鸿蒙·页面跳转
AFinalStone9 小时前
Android 7系统网络(八)应用API层—ConnectivityManager使用与实战调试
android·网络
plainGeekDev9 小时前
kapt 替换为 KSP
android·java·kotlin
蜡台10 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
এ慕ོ冬℘゜11 小时前
前端实战:Textarea 实时字数计数输入器(带字数限制+UI优化完整源码)
前端·ui
阿pin13 小时前
Android随笔-SharedPreferences
android·sp
阿pin13 小时前
Android随笔-DataStore
android·datastore
茶栀(*´I`*)14 小时前
Android 测试入门指南:ADB 基础配置与常用设备管理命令解析
android·adb
ihuyigui15 小时前
海外酒店预订短信接口
android·java·运维·服务器·前端·后端·架构