1.handler为android中多线程间通信的一种机制,
@1android中只允许在UI线程(主线程)操作或改变UI,其他线程不能操作UI。
@2其他线程有刷新UI的需要,所以得告诉UI线程,这时候就用到Handler,在handeMessage方法中处理消息。
@3handler可以定义在主线程也可以定义在其他线程,作用不一样。
@4与handler执行相关的类:Handler,Message,MessageQueue,Looper
UI线程:主线程,创建时会自动初始化一个Looper对象,也会创建一个消息队列
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。
MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。
Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。
Thread:线程,负责调度整个消息循环,即消息循环的执行场所。
2.handler的使用
@1用在主线程
---1-定义Handler对象,重写handleMessage方法,在方法里面处理消息,更新UI
private Handler mHanlder = new Handler(){ public void handleMessage(android.os.Message msg) { numberAdapter = new BlackNumberAdapter(getApplicationContext(), mList, mBnd); lv_blacknum.setAdapter(numberAdapter); }; };
---2-在其他 线程发送消息,有时需要自己定义消息对象
mHanlder.sendEmptyMessage(BLACKNUM_PREPARED);
@2handler定义在子线程,需要自己创建Looper对象
----流程:
====1.调用Looper.prepare()为当前线程创建Looper对象,此时会自动创建MessageQueue消息队列;2.创建Handler对象,重写handleMessage方法;3.调用Looper.loop()方法启动Looper消息循环
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?