当前位置: 首页 > ds >正文

Android --- Handler的用法,子线程中怎么切线程进行更新UI

我们都知道耗时操作需要放到子线程去操作,那我们可以new一个Thread来进行耗时操作,但是更新UI需要在主线程,就涉及到线程之间的切换,该如何处理呢?如下:


你可以通过使用 Handler 与 Looper.getMainLooper() 来创建一个主线程的 Handler,然后发送消息或 Runnable 到主线程执行。

// 创建一个 Handler,绑定到主线程的 Looper
Handler mainHandler = new Handler(Looper.getMainLooper());// 在子线程中执行任务,然后切换到主线程更新 UI
new Thread(new Runnable() {@Overridepublic void run() {// 执行一些耗时操作// 使用 Handler 切换到主线程更新 UImainHandler.post(new Runnable() {@Overridepublic void run() {// 在主线程中更新 UI// 例如更新 TextView 或其他 UI 元素textView.setText("更新 UI");}});}
}).start();

解释:
Looper.getMainLooper():获取主线程的 Looper,Handler 会绑定到这个 Looper,这样它就可以将消息投递到主线程。
mainHandler.post(Runnable):这个方法将一个 Runnable 任务发送到主线程执行。


另一种方法:通过 Activity 或 View 的 post 方法
你也可以直接在 Activity 或 View 上调用 post 方法,将任务切换到主线程:

// 直接在 UI 控件上执行任务
textView.post(new Runnable() {@Overridepublic void run() {// 在主线程中执行textView.setText("更新 UI");}
});

这种方式不需要手动创建 Handler,它会自动将任务切换到主线程。


runOnUiThread 最后一种:

// 在子线程中执行耗时操作,然后切换到主线程更新 UI
new Thread(new Runnable() {@Overridepublic void run() {// 执行一些耗时操作// 使用 runOnUiThread 切换到主线程更新 UIrunOnUiThread(new Runnable() {@Overridepublic void run() {// 在主线程中更新 UItextView.setText("更新 UI");}});}
}).start();

解释:
runOnUiThread():这是 Activity 类的一个方法,它接受一个 Runnable 对象作为参数,并在主线程中执行该 Runnable 内的代码。
这种方法适用于在 Activity 中直接操作 UI 时,尤其是在子线程中执行耗时操作后需要更新 UI 的场景。


http://www.xdnf.cn/news/13377.html

相关文章:

  • 清华大学视觉空间智能新突破!Spatial-MLLM:提升多模态大语言模型的视觉空间智能能力
  • 3通道图的数据在opencv的mat是如何存放的
  • flow_controllers
  • plantuml画uml图
  • Python实例题:Python计算离散数学
  • 使用swagger来生成文档
  • C++中优雅的属性封装:Sint类设计分析
  • 网络六边形受到攻击
  • PLC入门【5】基本指令3(PLS PLF ZRST)
  • TestCafe API
  • vue3 + element plus -- table表格使用sortablejs实现表格拖拽换位功能
  • 麒麟Kylin V10 SP3服务器操作系统安装
  • 项目进度管理软件是什么?项目进度管理软件有哪些核心功能?
  • LoRA(Low-Rank Adaptation,低秩适应)
  • leetCode- 两数相加
  • 【AI学习】一、向量表征(Vector Representation)
  • 报告精读:金融算力基础设施发展报告 2024【附全文阅读】
  • 构建欺诈事件的结构化威胁建模框架
  • Coze 和 Dify 对比
  • 销售心得分享
  • 保险风险预测数据集insurance.csv
  • vivado IP核High speed/Low latency设置对系统性能的影响
  • 深入浅出Diffusion模型:从原理到实践的全方位教程
  • 改进系列(13):基于改进U-ResNet的脊椎医学图像分割系统设计与实现
  • 游戏盾的功能是什么
  • 关于前端常用的部分公共方法(二)
  • 2.6 查看动态库或程序的依赖库
  • PH热榜 | 2025-06-06
  • 高保真组件库:上传
  • “深时数字地球”新进展!科学智能助推地球科学研究范式变革