详解Android UI更新的几种方法
发布时间 - 2026-01-11 01:55:41 点击率:次前言

在android开发中,界面UI的更新都是在主线程来完成的。线程分为主线程(Main Thread,简称MT)和工作线程(Work Thread,简称WT),我们通常会在WT中执行一些比较耗时的操作,比如下载,网络,缓存等,然后在将结果发送给MT进行UI的更新操作。如果是在WT进行UI的更新,则会抛出异常,android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.(只有创建这个View的原始线程才能修改这个view)。
在BT搜索、WIFI搜索、其他需要更新View的UI过程中,很多是采用广播的方式通知搜索的结果,实时的显示到listview中进行UI的更新操作。通常会使用以下几种方式进行UI的更新:handler,runOnUiThread,子线程发送Message。
一、Activity.runOnUiThread
利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新 ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.e(TAG, "开始添加设备!");
addDevice(device);
}
});
二、handler.post(Runnable)
handler.post(new Runnable() {
@Override
public void run() {
addDevice(device);
}
});
三、子线程发送Message
首先在需要执行更新的位置添加以下代码
new Thread(new Runnable() {
@Override
public void run() {
//Message msg = new Message();
//msg.what = 0x06;
//handler.sendMessage(msg);
handler.sendEmptyMessage(0x06);
}
}).start();
然后进入handler下进行处理
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x06:
addDevice(device);
break;
default:
break;
}
super.handleMessage(msg);
}
};
以上三种方法都可以实现UI的更新,掌握哪种方式取决于代码中的叠加度,不过个人推荐使用方法一。希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# UI更新
# UI更新方法
# Android 在其他线程中更新UI线程的解决方法
# android使用多线程更新ui示例分享
# Android异步更新UI的四种方式
# Android更新UI的四种方法详解
# Android 更新UI的方法汇总
# Android UI更新的几种方法总结
# 详解android进行异步更新UI的四种方式
# 是在
# 推荐使用
# 会在
# 能在
# 三种
# 几种
# 可以实现
# 哪种
# 来完成
# 则会
# 抛出
# 大家多多
# 通常会
# 过程中
# 发送给
# View
# br
# touch
# views
# hierarchy
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
zabbix利用python脚本发送报警邮件的方法
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
轻松掌握MySQL函数中的last_insert_id()
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
如何确认建站备案号应放置的具体位置?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
制作企业网站建设方案,怎样建设一个公司网站?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何用VPS主机快速搭建个人网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
WordPress 子目录安装中正确处理脚本路径的完整指南
如何制作一个表白网站视频,关于勇敢表白的小标题?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
用v-html解决Vue.js渲染中html标签不被解析的问题
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
如何获取PHP WAP自助建站系统源码?
Android自定义控件实现温度旋转按钮效果
linux top下的 minerd 木马清除方法
如何用西部建站助手快速创建专业网站?
如何快速建站并高效导出源代码?
大连 网站制作,大连天途有线官网?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
高端建站如何打造兼具美学与转化的品牌官网?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
Android 常见的图片加载框架详细介绍
如何在橙子建站上传落地页?操作指南详解
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
西安专业网站制作公司有哪些,陕西省建行官方网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何在阿里云香港服务器快速搭建网站?
音响网站制作视频教程,隆霸音响官方网站?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
php 三元运算符实例详细介绍
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何用AI帮你把自己的生活经历写成一个有趣的故事?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】

