消息机制指Handler、Looper、MessageQueue、Message之间如何工作的,首先是Looper会创建好带有Looper的线程等待其他线程发送消息过来,一旦有消息之后,Looper取出MessageQueue对头的Message,之后调用了Handler的dispatchMessage方法,把消息传给了Handler,之后消息到了工作线程(主线程)。 这里会问到,一个线程会有几个Looper,几个Handler,以及Looper会存在线程哪里? 一个线程一个Looper,可以有多个Handler,Looper会存在线程的ThreadLocal对象里,该对象是线程的缓存区
ThreadLocal:它是和线程一一对应的,从Thread类可以看出来,ThreadLocal是作为Thread变量来使用。ThreadLocal只是ThreadLocalMap的一个包装类,实现了get和set方法,而ThreadLocalMap实际是一个由Entry内部类组成的数组,Entry是继承自弱应用,弱引用里面放的就是ThreadLocal当前对象,Entry的value存的是当前线程要存储的对象,value作为Entry的成员变量。 ThreadLocal经常会问到内存泄漏的问题,从上面分析可以发现ThreadLocalMap里面的Entry对象存储的ThreadLocal弱引用,而value直接作为Entry的强引用,因此在用到了ThreadLocal的地方,防止内存泄漏,手动调用remove方法。