Android - Handler消息机制

Handler的主要作用是收发 msg 和切线程,他的消息机制离不开Looper、MessageQueue

  • 其中 Looper 每个线程只能持有一个,主要负责循环查看 MessageQueue 里面是否有 msg 需要处理,并将需要处理的消息取出,交给 Handler
  • MessageQueue 是负责存放消息的,数据结构是一个单链表,这样就可以方便地插入或删除 msg

具体流程一般是:

  1. Handler 发送一条msg => 本质是向MessageQueue里插入1.1一条msg
    1.1插入时候的依据是msg.when => SystemClock.uptimeMillis() + delayMillis
  2. 这条msgMessageQueue.next()2.1返回并交给Handler去处理
    2.1 next()会在有同步屏障(msg.target==null)的时候遍历查找并返回最早的异步消息,并在移除屏障后,从头取出并返回消息
  3. Handler.dispatchMessage(msg)会优先处理msg.callback3.1,如果msg.callback为空,就处理Handler.mCallback3.2,然后处理是msg本身
    3.1msg.callback是在调用Handler.post(Runnable)时,里面的Runnable(runOnUIThreadview.post(Runnable)也用的是Handler.post(Runnable)Runnable是一样的)
    3.2这是在不继承Handler的情况下,另一种调用Handler的方式
class MyHandlerCallBack: Handler.Callback {
  override fun handleMessage(msg: Message?): Boolean {
    TODO("Not yet implemented")
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容