Handler 机制:
handler、Message、Looper、MessageQueue
handler 就是在子线程发送消息、处理消息
1.Looper 轮询器和 MessageQueue 的创建:
1.在使用 Handler 的过程中,没有使用 Looper 和 MessageQueue
对象,如果你在一个线程当中使用 Handler 机制的话,必须得有 Looper 和
MessageQueue。
2. 主 线 程 会 帮 我 们 调 用 prepareMainLooper , 也 就 是
Looper.Prepare。
3.Looper.Prepare 会通过 threadLocal(线程单例,一个线程有一
个对象)获取一下当前线程是否已经有了 Looper,如果有,报异常,如果没
有,new 一个出来。
4.Looper.Prepare 会调用 Looper 的 private 构造方法,把 new 出
来的 Looper 保存到 threadLocal 中。
5.Looper 在 new 对 象 的 时 候 , 在 构 造 方 法 中 会 创 建 一 个
MessageQueue 对 象 , 并 通 过 一 个 nal 类 型 的 成 员 变 量 把
MessageQueue 保 存 起 来 , 这 样 确 保 了 一 个 Looper 对 应 一 个
MessageQueue。
6. 所 以 , 一 个 线 程 对 应 一 个 Looper , 一 个 Looper 对 应 一 个
MessageQueue。
7.MessageQueue 在 创 建 的 时 候 , 也 创 建 了 一 个
nativeMessageQueue,这个 nativeMessageQueue 在 JNI 层。他们俩通
过一个成员变量 mPtr 建立关系,mPtr 保存了 nativeMessageQueue 的指
针。这个指针保存着 nativeMessageQueue 的首地址,随时可以用这个地
评论0
最新资源