主要以下对象:
Message : 消息对象
MessageQueue : 消息队列,存放待处理消息
Handler : 发送消息
Looper : 轮询队列中的信息
- Looper.prepare() : 在创建Activity的时候会被执行,创建Looper对象并绑定到ThreadLocal上以及调用prepare方法执行下面两个操作
- 初始化MessageQueue
- 绑定当前进程
- 创建Handler,在Handler的构造函数中,会通过Looper.myLooper();获取当前Activity已经初始化的Looper对象,即可以拿到对应MessageQueue。
- Handler拿到messageQueue,就可以sendMessage进去
- Looper.loop()可以循环读取MessageQueue中的消息,利用msg.target.dispatchMessage(msg)分发消息
调用图,加深理解:
Paste_Image.png注:ThreadLocal:本地线程能用map集合,在其他线程不能获取这个值。例子:
public class Main {
public static void main(String[] args) {
ThreadLocal<String> localMap = new ThreadLocal<>();
localMap.set("我是被設置在ThreadLocal中的變量");
show(localMap);
new Thread() {
public void run() {
show(localMap);
};
}.start();
}
private static void show(ThreadLocal<String> localMap) {
String string = localMap.get();
System.out.println("獲取到的值為:" + string);
}
}
结果:
獲取到的值為:我是被設置在ThreadLocal中的變量
獲取到的值為:null
网友评论