详解android进行异步更新UI的四种方式
发布时间 - 2026-01-11 01:15:30 点击率:次大家都知道由于性能要求,Android要求只能在UI线程中更新UI,要想在其他线程中更新UI,我大致总结了4种方式,欢迎补充纠正:

- 使用Handler消息传递机制;
- 使用AsyncTask异步任务;
- 使用runOnUiThread(action)方法;
- 使用Handler的post(Runnabel r)方法;
下面分别使用四种方式来更新一个TextView。
1.使用Handler消息传递机制
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
Handler handler = new Handler()
{
public void handleMessage(android.os.Message msg) {
if(msg.what==0x123)
{
tv.setText("更新后的TextView");
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
new MyThread().start();
}
class MyThread extends Thread
{
@Override
public void run() {
//延迟两秒更新
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0x123);
}
}
}
2. 使用AsyncTask异步任务
注:更新UI的操作只能在onPostExecute(String result)方法中。
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
new Yibu().execute();
}
class Yibu extends AsyncTask<String, String, String>
{
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
tv.setText("更新后的TextView");
}
}
}
3. 使用runOnUiThread(action)方法
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
new MyThread().start();
}
class MyThread extends Thread
{
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
//延迟两秒更新
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.setText("更新后的TextView");
}
});
}
}
}
4. 使用Handler的post(Runnabel r)方法
package com.example.runonuithreadtest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
Handler handler = new Handler();
handler.post(new Runnable(){
@Override
public void run() {
try {
//延迟两秒更新
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tv.setText("更新后的TextView");
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 异步更新ui
# 异步ui
# 更新ui
# Android异步更新UI的四种方式
# android开发教程之handler异步更新ui
# 详解android异步更新UI的几种方法
# 大家都
# 只能在
# 要想
# 四种
# 大家多多
# 总结了
# Activity
# app
# Bundle
# os
# java
# runonuithreadtest
# package
# import
# widget
# void
# handler
# Message
# handleMessage
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
浅谈redis在项目中的应用
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何快速查询域名建站关键信息?
Laravel如何自定义分页视图?(Pagination示例)
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
大型企业网站制作流程,做网站需要注册公司吗?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel如何处理和验证JSON类型的数据库字段
Laravel怎么在Blade中安全地输出原始HTML内容
如何在阿里云部署织梦网站?
网站制作报价单模板图片,小松挖机官方网站报价?
Python图片处理进阶教程_Pillow滤镜与图像增强
高防服务器租用如何选择配置与防御等级?
详解Android——蓝牙技术 带你实现终端间数据传输
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel怎么上传文件_Laravel图片上传及存储配置
iOS验证手机号的正则表达式
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Android自定义listview布局实现上拉加载下拉刷新功能
Laravel如何发送系统通知?(Notification渠道示例)
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Laravel distinct去重查询_Laravel Eloquent去重方法
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
常州企业网站制作公司,全国继续教育网怎么登录?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
jquery插件bootstrapValidator表单验证详解
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
零基础网站服务器架设实战:轻量应用与域名解析配置指南
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
EditPlus 正则表达式 实战(3)
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel怎么判断请求类型_Laravel Request isMethod用法
Linux后台任务运行方法_nohup与&使用技巧【技巧】
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
Laravel如何使用Blade模板引擎?(完整语法和示例)
Python正则表达式进阶教程_复杂匹配与分组替换解析
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
nginx修改上传文件大小限制的方法
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
在线教育网站制作平台,山西立德教育官网?

