Android的消息机制概述
- Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。
- MessageQueue是消息队列,内部存储了一组消息,以队列的形式对外提供插入和删除的工作。虽然叫消息队列,但它的内部并不是真正地队列,而是采用单链表的数据结构来存储消息列表。
- Looper是消息循环,MessageQueue只是一个消息的存储单元,而Looper会以无线循环的形式去处理消息。
- Looper还有个特殊的概念,是ThreadLocal,ThreadLocal并不是线程,它的作用是可以在每个线程中存储数据。Handler创建的时候会采用当前线程的Looper来构造消息循环系统,而ThreadLocal可以在不同的线程中互不干扰的存储并提供数据,通过ThreadLocal可以轻松获取每个线程的Looper。
- 线程是默认没有Looper的,如果需要用到Handler就必须为线程创建Looper,而主线程ActivityThread被创建时就会初始化Looper,这也就是主线程中默认可以使用Handler的原因。