android Handler应用
android在运行时改变ui需要在ui线程中修改才行,不然就会报错或者无法启动应用。
我们怎么可以做事不管呢?
既然不能在ui线程外的地方运行修改ui的代码,我们可以用Handler解决这个问题,
而Handler消息机制用于同进程的线程间通信,通过发送Message我们可以有效的避开报错。
那怎么写Handler才能帮我们修改指定的ui呢?
(^U^)ノ~YO 问对人了,我知道哦!!!
相关概念解释
Message :代表一个行为what或者一串动作Runnable, 每一个消息在加入消息队列时,都有明确的目标Handler
ThreadLocal: 线程本地存储区(Thread Local Storage,简称为TLS),每个线程都有自己的私有的本地存储区域,不同线程之间彼此不能访问对方的TLS区域。ThreadLocal的作用是提供线程内的局部变量TLS,这种变量在线程的生命周期内起作用,每一个线程有他自 己所属的值(线程隔离)
MessageQueue (C层与Java层都有实现) :以队列的形式对外提供插入和删除的工作, 其内部结构是以双向链表的形式存储消息的
Looper (C层与Java层都有实现) :Looper是循环的意思,它负责从消息队列中循环的取出消息然后把消息交给Handler处理
Handler :消息的真正处理者, 具备获取消息、发送消息、处理消息、移除消息等功能
在我学习Handler时遇到了是否多的问题,在我的不断调试下我发现了。
两种可以有效修改ui的方法:
方法一:
重写Handler的handleMessage方法:
//直接写在类中
private final Handler handler = new Handler(Looper.myLooper()){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
//在这写修改ui的代码
}
};
调用:
handler.sendEmptyMessage(0);//写在非ui线程的地方
方法二:
new Handler().post(new Runnable() {//可以写在非ui线程的地方
@Override
public void run() {
//使用post方法更新UI
}
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异