- Looper不断获取MessageQueue中的Message,交由Handler处理
- MessageQueue内包含Runnable与Message,Message内保存相同类型的Object
- MessageQueue队列为空后Looper进入休眠
- Handler
- 每个Thread对应一个Looper、每个Looper对应一个MessageQueue、MessageQueue内有多个Message、每个Message对应1个Handler、每个MessageQueue可以对应多个Handler
- Handler作用:
- 处理Message(Handler.dispatchMessage派发消息或handleMessage将Message分发给责任人)
- 将Message压入MessageQueue中(程序的有序性,根据优先级决定处理事件的先后顺序)
- Handler()初始函数中获取当前线程中Looper实例,并将其对应的MessageQueue(mLooper.mQueue)赋给Handler对应MessageQueue(mQueue)
- MessageQueue
- Looper
- Looper类中含sThreadLocal静态全局变量,一旦import即创建完成
- Looper.prepare根据保存的模板类sThreadLocal得到返回的Looper
- ThreadLocal范围仅限于自己所在线程,每个线程Looper是独立的
class ThreadTest extends Thread{
public Handler mHandler;
public void run(){
Looper.prepare();//
mHandler = new Handler(){//
public void handleMessage(Message msg){
......
}
};
Looper.loop();//进入循环
}
}