一.Handle的用例:
1.创建handle实例
new handle();
2.发送信息载体(Message)
sendMessage(msg);
3.处理消息
handleMessage(Message msg){};
二.原理浅析
结合以上的handle调用三部曲,我们将顺藤摸瓜理清Handle、Looper、Message、MessageQueue的逻辑与关系。
1.new Handle():这个操作将生成一个Handle实例,handle实例有三个属性mLooper、mQueue、mCallback,以下解释这三个属性的来历。
1.a:mLooper = Looper.myLooper();Looper的myLooper静态方法也很简单、
public static Looper myLooper() {
return sThreadLocal.get();
}
sThreadLocal是一个单例对象,他的类型是ThreadLocal<Looper>,这个类有set()、get()方法,他的作用是当前线程的对象,那么这句代码的作用很明显了就是返回当前线程的Looper对象。再深入一点想,他的set方法在哪里呢?答案是在prepare中:
private static void prepare(boolean quitAllo