Android消息机制(Handler)

节选整理自《Android开发艺术探索》

答疑解惑
  • 系统为什么不允许在子线程中访问UI?
    • Android的UI控件不是线程安全的
    • 增加上锁机制会导致: UI访问逻辑复杂、降低UI访问效率
  • 区分线程的数据存储
    • ThreadLocal
工作原理
MessageQueue

内部由单链表实现,主要包含两个操作:插入(enqueueMessage)和读取(next)。

Looper

从MessageQueue中不停查看是否有新消息,如果有新消息立即处理。

  • 系统已经为主线程创建了Looper,可以使用getMainLooper获取
  • 其他线程使用Looper.prepare()获取,使用Looper.loop()启动
  • loop方法是一个死循环,运行在创建Looper的线程
Handler

负责发送和接收消息。可以通过post和send方法发送消息,post方法最终也会走入send的逻辑。

Handler工作过程:

Android消息机制(Handler)_第1张图片
屏幕快照 2018-02-08 上午10.53.57.png

Handler消息处理流程:

Android消息机制(Handler)_第2张图片
屏幕快照 2018-02-08 上午11.47.34.png

你可能感兴趣的:(Android消息机制(Handler))