1、android线程间的通讯,都是经过Handler在线程之间的切换。包括耗时任务的结果传送到UI线程等。
2、Handler使用包括2种形式,一种是主线程和子线程的交互,另外一种是子线程和子线程之间的交互。
3、Handler的创建,主线传入Looper.getMainLooper;如果是在子线程中创建,则需要在Looper.prepare(); 和 Loop.loop之间创建,否则会抛出异常。
4、Handler 的消息机制分为5个部分,Handler、message、Message Queue、Looper、ThreadLocal,以下将对此5部分分别进行详解。
Message,Message 是线程之间传递的消息,通过handler的sendMessage发送。message包含4个常用字段,what、arg1、arg2、obj。obj携带对象,其他的携带整形数据。
Message Queue:消息队列即是存储Handler发送的message存储的地方,message是通过一个单链表的结构来维护消息列表的,先进先出。每个线程只有一个Message Queue。Handler中的MessageQueue实际是Looper中定义的MessageQueue。
Looper:Looper的loop是一个无线循环,message queue中消息都是经过Looper无线循环中取出来的,直到消息队列为空;如果进来新的消息,因为Looper是个无线循环,可以马上取进来的message。
ThreadLocal:Looper中定义了TheadLocal,每个线程保持了一个Looper副本,因此Looper对线程是唯一的。ThreadLocal是创建线程局