节选整理自《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工作过程:
屏幕快照 2018-02-08 上午10.53.57.pngHandler消息处理流程:
屏幕快照 2018-02-08 上午11.47.34.png
网友评论