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

(这里是结束)

相关推荐
tongyiixiaohuang1 天前
WMS已发货状态反写金蝶云星空:单策略实战教程
android
好的佩奇1 天前
Dart 之类修饰符
android·flutter·dart
alexhilton1 天前
用Konsist与Lint强制执行设计系统契约
android·kotlin·android jetpack
北京自在科技1 天前
谷歌安卓 Gemini 迎来界面改版,Find Hub 接入 Gemini 支持物品记忆查找
android·安卓
YB13751 天前
Jetpack Compose 动画Modifier.animateItem()
android
2401_885885041 天前
巴林语音通知接口如何对接?系统告警语音API接入教程
android·前端·网络·python·语音识别
收纳过往2 天前
数据库加索引的时机:慢查询日志说话
android·开发语言·数据库·python·低代码·rxjava
狂热开发者2 天前
车载中控要给鸿蒙用户,能不能和 Android 共用一个二维码?
android·华为·harmonyos
.Bryce.2 天前
T2-LLM评测不等于Agent评测
android·java·人工智能·后端·gpt·agent·1024程序员节
美狐美颜SDK开放平台2 天前
视频美颜SDK如何应对快速转头与大幅度面部动作?
android·人工智能·ios·音视频·直播美颜sdk·视频美颜sdk