1、Handler 与 Thread 的桥梁是 Looper;
2、在 Thread 中,通过 Looper.prepare() 方法,新建一个 looper 对象,从而将 Looper 与 Thread 绑定了起来
3、在 Handler 构造函数中,存在下面这段代码:
mLooper = Looper.myLooper();
...
// 从而获取到当前 Thread 的 Looper
public static final Looper myLooper(){
return (Looper)sThreadLocal.get();
}
4、在一个 Thread 中,可以存在多个 Handler,Message 由哪个 Handler 发送,则由哪个 Handler 处理
5、handler 与哪个 Thread 共享 Looper,则 Mesage 里面的 回调函数 callback 则在哪个 Thread 中执行;
6、在非主线程中,创建 handler 之前一定要先创建该线程的 Looper,(通过 Looper.prepare() 方法); 并在最后调用 Looper.loop() 因为 Looper.loop() 是一个死循环,用于从 MessageQueue 中轮循并提取 Message 处理;
关于 HandlerThread
1、HandlerThread 是专门为 Handler 准备的,已经内置了一个 Looper,通过方法 getLooper() 既可获得;
2、Handler 通过 new Handler(handlerThread.getLooper()) 方法即可与该 HandlerThread 绑定;
3、启动 HandlerThread 需要调用 start() 方法;
4、该线程是新奇动的一个线程,不在主线程当中;