首页 > 其他分享 >在子线程中更新UI组件

在子线程中更新UI组件

时间:2022-12-03 16:13:02浏览次数:37  
标签:info tv 在子 主线 线程 new UI

android UI 界面更新

UI线程属于主线程,当涉及到需要更新UI组件的问题时,需要在主线程中更新,另起线程会出现线程崩溃,当子线程需要修改主线程的UI组件时,需要通过发送消息来进行处理,方法如下

  1. 子线程直接修改UI组件,出现报错:

    Activity --> onCreate(){
     tv_info = findViewById(R.id.tv_info);
       onClick(){
           findViewById(R.id.btn_change_str).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    tv_info.setText("hello android!");//子线程直接修改UI线程(主线程)
                }
            }).start();
        }
    });
    }
    }
  2. 解决办法:

    主线程中创建消息处理对象,子线程发送message,给主线程的Handler处理

    Activity:
    private TextView tv_info;
       private Handler handler = new Handler(){
               @Override
               public void handleMessage(@NonNull Message msg) {
                   super.handleMessage(msg);
                   if (msg.what == 1) {
                   tv_info.setText("hello android !");
                      }
                  }
              };
       -->onCreate(){
       new Thread(new Runnable() {
       @Override
       public void run() {
           tv_info = findViewById(R.id.tv_info);
           handler.sendEmptyMessageDelayed(1, 3000);//子线程发送空消息给主线程,主线程handler接收到消息并处理
        }
      }).start();
    }
    //最终效果:点击按钮修改text成功

标签:info,tv,在子,主线,线程,new,UI
From: https://www.cnblogs.com/a-n-yan/p/16948217.html

相关文章

  • SwiftUI 常见组件示例
    基础组件TextText("Hamlet").font(.largeTitle)Text("byWilliamShakespeare").font(.caption).italic()ImageHStack{Image(systemName:"fol......
  • 线程的活跃性
    一、死锁有A,B两把锁,t1持有A想获取B,t2持有B想获取A,导致t1t2两个线程最终都进入阻塞状态的现象publicclassTest8{privatefinalstaticLoggerLOGGER=LoggerF......
  • Sublime_Text4_Build_4107_x64下载,开发必备
    关注微信公众号【工控羊】或者微信号【gksheep】,微信公众号后台输入数字编号【2019】即可获取下载链接。......
  • JUC高级篇-第2章 多线程锁
    1.乐观锁与悲观锁悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。适合写操作多的场景,先加锁可以保......
  • HBuilderX.3.2.9前端开发软件下载
    关注微信公众号【工控羊】或者微信号【gksheep】,微信公众号后台输入数字编号【0006】即可获取下载链接。......
  • 控制多个线程的执行顺序
    记录了如何控制多个线程的执行顺序,以练习题的形式记录一、两个线程顺序执行题目描述:线程t1会打印A,线程t2会打印B,实现先打印B再打印A题目分析:实现的关键是线程1执行......
  • 低代码平台前端的设计与实现(二)构建引擎BuildEngine切面处理设计
    上一篇文章,我们介绍了如何设计并实现一个轻量级的根据JSON的渲染引擎,通过快速配置一份规范的JSON文本内容,就可以利用该JSON生成一个基础的UI界面。本文我们将回到低开的核......
  • js向ul标签添加li并且li标签有修改删除按钮+js中添加颜色css样式(使用layui下拉)
    js向ul标签添加li并且li标签有修改删除按钮Layui当中的导航条动态添加效果:1、html放置ul标签<ulclass="layui-nav"id="nav"layui-filter="test"></ul>/2、js编......
  • pip 生成requirement配置文件,快速安装配置环境
    pip生成requirement配置文件,快速安装配置环境在当前目录下生成requirements.txt文件pipfreeze>./requirements.txt按照requirement配置文件,快速配置环境pipinst......
  • Python笔记-多进程多线程
    日常运维中,经常需要并发来提升工作效率。Python提供了多线程和多进程两种方式。importtimeimportthreadingimportmultiprocessingdefprint_fun(num):print(time.str......