手写Handler框架示例
Handler是Android SDK来处理异步消息的核心类。 子线程与主线程通过Handler来进行通信。子线程可以通过Handler来通知主线程进行UI更新。
共享内存。
通过ThreadLocal共享MessageQueue和Looper。
生产者-消费者设计模式
生产 -> 消息入队列
消费 -> 消息出队列
一个线程 -> 唯一ThreadLocal -> 唯一Looper -> 唯一MessageQueue
因为Looper是通过Looper.prepare()创建的,而在prepare()方法中,会把Looper存放在ThreadLocal中。
ThreadLocal是一个HashMap,key是Thread(Thread.currentThread()),value是Looper对象。
同时,获取Looper对象也通过ThreadLocal.get()方法来获取,保证一个线程只有一个Looper。
ThreadLocal用来提供线程的上下文Context(比如线程的局部变量等),每个线程都具有唯一一个ThreadId和ThreadLocal.Value。