Handler机制学习

2017-06-11  本文已影响11人  idioitcbear

主要以下对象:
Message : 消息对象
MessageQueue : 消息队列,存放待处理消息
Handler : 发送消息
Looper : 轮询队列中的信息

  1. Looper.prepare() : 在创建Activity的时候会被执行,创建Looper对象并绑定到ThreadLocal上以及调用prepare方法执行下面两个操作
  2. 初始化MessageQueue
  3. 绑定当前进程
  4. 创建Handler,在Handler的构造函数中,会通过Looper.myLooper();获取当前Activity已经初始化的Looper对象,即可以拿到对应MessageQueue。
  5. Handler拿到messageQueue,就可以sendMessage进去
  6. 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
上一篇 下一篇

猜你喜欢

热点阅读