本文共 1219 字,大约阅读时间需要 4 分钟。
参考:《深入理解Android 内核设计思想》
内容有缩减,具体去看书。。
Handler机制的作用:
1.异步回调机制
2.将工作线程需要操作UI的消息传递到主线程,使主线程可根据工作线程的需求更新UI
Handler机制的组成:
1.handler类
Handler类利用自身的处理机制,对传入的各种Object进行相应的处理并产生最终结果。
作用: 1)处理Message,
2)将Message压入MessageQueue中。
2.Looper类
Looper从MessageQueue中取出一个Message后,调用Handler.dispatchMessage进行消息派发;后者根据具体的策略将Message发送给相应的责任人。
3.MessageQueue类
消息队列
Handler机制的三个类相互之间的对应关系:
一个Looper中包含一个MessageQueue;
每个线程的Looper都是独立的,一个线程对应一个Looper;
每个Message中最多指定一个Handler来处理事件;
Handler机制的过程:
Looper从MessageQueue中拿出一个Message,交给Handler。
Looper中有一个ThreadLocal<Looper>的静态常量,这说明在每一个线程中都有一个独立的Looper。
Looper如何将Message交给Handler的??
public class Handler{ final MessageQueue mQueue; final Looper mLooper; final Callback mCallback; ...... }
Handler中有成员变量mQueue、mLooper、mCallback,由final修饰,需要在构造函数中初始化。其构造函数有:
public Handler(){} public Handler(Callback callback){} public Handler(Looper looper){} public Handler(Looper looper,Callback callback){}
即在构造函数中部分指定了Looper和Callback,以第一个构造函数为例:
public Handler(){ mLooper = Looper.mLooper(); ...... mQueue = mLooper.mQueue; mCallback = null; ...... }
在Handler的构造函数中,直接调用了静态变量的Looper.mLooper()返回了属于当前线程的Looper,于是handler就连接上了当前线程的Looper。
转载地址:https://blog.csdn.net/mengmengmengwang/article/details/108206099 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!