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

(这里是结束)

相关推荐
lilian2332 分钟前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_955759629 分钟前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
AFinalStone20 分钟前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone22 分钟前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
imperialeast2 小时前
WinAXP音乐播放器8月4日更新
windows·算法·ui
极客猴子4 小时前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书
Kapaseker4 小时前
Boolean 变量到底该怎么命名?
android·kotlin
AFinalStone4 小时前
Android 7系统异常问题排查(六)应用异常(上)—ANR机制全解
android·系统异常
雾屿_Mistisle4 小时前
文件包含漏洞(File Inclusion)
android
小孔龙5 小时前
Android 图形系统全景
android·计算机图形学