API
Handler相关
Handler对象.sendMessage(Message)
发送消息
Handler对象.handleMessage()空方法
自定义Handler重写handleMessage方法,处理Message
Looper相关
Looper.getMainLooper()
获取App的UI线程的Looper对象
Looper.prepare()
创建Looper对象
Looper.loop()
开启死循环
Looper.myLooper()
获取当前线程的Looper对象
Looper.myQueue() /Looper对象.getQueue()
获取MessageQueue对象
Looper对象.getThread()
获取Thread对象
HandlerThread
HandlerThread对象.getLooper()
获取HandlerThread对象对应的Looper对象
源码分析
Looper、MessageQueue、Handler的类关系
一个Thread对应一个Looper
一个Looper对应一个MessageQueue
一个MessageQueue对应多个Handler
Handler负责
1.向MessageQueue添加Message
Handler.sendMessage
2.保存Message对应的处理代码
Handler.handleMessage()
MessageQueue负责存储Message
Looper负责死循环MessageQueue
从MessageQueue获取Message,在对应线程中执行Message对应的Handler保存的处理代码
Looper
持有一个ThreadLocal<Looper>的静态对象sThreadLocal,用于保证一个线程持有一个Looper对象
持有一个MessageQueue对象mQueue
HandlerThread
继承Thread, 重写run()方法
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
操作
自定义Thread实现Looper循环
Looper.prepare();
Looper.loop();
创建Handler,绑定当前线程的Looper
new Handler();
创建Handler,绑定特定线程线程的Looper
创建Handler,绑定特定线程线程的Looper
new Handler(Looper对象)