先来说一下流程

1、ActivityThread中通过Looper.prepareMainLooper() 创建looper对象

1)在Looper.prepareMainLooper() 方法中,如果有Looper实例会报错,所以一个线程中只能有一个Looper实例
handler原理解析
2)在Looper.java类中直接创建sThreadLocal,ThreadLocal是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据
handler原理解析
3)通过下图也可以看出ThreadLocal也是只能有一个,参数quitAllowed表示是否可以手动退出死循环,
handler原理解析
4)下面的图是sThreadLocal.set(new Looper(quitAllowed))方法
handler原理解析
5)接下来看getMap与createMap方法,getMap是从当前的线程中获取ThreadLocalMap,如果有就将当前的ThreadLocal与Looper绑定,如果没有再new ThreadLocalMap进行绑定
handler原理解析
6)结合3)看handler原理解析

2、Looper.loop()开启死循环,在它后面的代码不会执行

相关文章:

  • 2021-09-01
  • 2021-09-03
  • 2021-07-08
  • 2022-01-29
  • 2021-07-13
  • 2021-06-22
猜你喜欢
  • 2021-10-03
  • 2021-09-10
  • 2021-04-14
  • 2021-06-28
  • 2021-07-13
  • 2022-02-08
  • 2022-12-23
相关资源
相似解决方案