Handler消息机制

Handler消息机制主要涉及以下类:

  • Handler
  • Looper
  • MessageQueue
  • Message

Handler必须创建在有Looper的线程中,Looper.prepare()即在该线程创建Looper。

  1. Handler发送消息到MessageQueue,调用MessageQueue的enqueueMessage(),将消息按时间顺序插入到链表中。
  2. Looper调用loop()开启无限循环,内部调用MessageQueue的next()取消息。内部调用nativePollOnce,作用是设置一个定时的睡眠。根据nextPollTimeoutMillis来判断睡眠:
  • nextPollTimeoutMillis = 0 :无需睡眠,直接返回。
  • nextPollTimeoutMillis > 0 :睡眠超过nextPollTimeoutMillis,就返回。
  • nextPollTimeoutMillis = -1 :一直睡眠,直到其他线程唤醒。
  1. 取出消息后,则根据msg.target对应的handler,调用dispatchMessage来处理消息。当Looper调用了quit或者quitSafely,会导致取出的消息为null,则退出looper循环。

参考:
https://www.jianshu.com/p/a7559af33986
https://www.jianshu.com/p/13c8a66d3b5c

你可能感兴趣的:(Handler消息机制)