Handler原理

2021-12-21  本文已影响0人  愿你我皆是黑马

最近在画各种图,所以这里贴贴图来说明一下


Handler通信的基本原理


创建Looper


主线程赋值mHandler变量具体实例mHander=new Handler()的过程:

  1. 构造Handler时候传的构造参数async为false:同步消息
  2. 构造Handler时候传的构造参数async为true :异步消息
  3. Message调用setAsynchronous=true(当Handlerasync为false时有效):异步消息
  4. static Handler createAsync(@NonNull Looper looper):异步消息(28)

sendMessage发送消息流程

一般不在这里唤醒Looper,除非:图中(贴代码的部分) 一开始的唤醒判断为true,并且传入消息参数的是最早的异步消息


loop.loop流程

先发一下看看用图片的效果,后面的继续补充


唤醒和挂起


同步屏障:在取消息的时候,会暂时忽略同步消息,只处理异步消息和等待异步消息插入


移除消息


为什么建议使用obtain获取Message


其他API (public)


简要提提延伸

  1. Message.obtain()
  2. Handler泄露
  3. 各种内置子线程的Handler实现
  4. IdleHandler
  5. 判断主线程
  6. 优先级链表
  7. 线程本地
上一篇 下一篇

猜你喜欢

热点阅读