Handler、Looper、Message、MessageQu

2020-03-19  本文已影响0人  ArcherZang
详细篇幅地址
  1. java层具体方法说
  2. navtie层方法说明
  3. eopll方法测试
    为啥 不自己写native层因为觉得没啥好写,主要没时间O(∩_∩)O哈哈~。为啥写测试方法主要觉得很多人对这个方法理解有问题。
    依旧要强调一下nativePollOnce(ptr, nextPollTimeoutMillis)不是一直阻塞这是个坑。
    • nextPollTimeoutMillis=-1是 一直阻塞
    • nextPollTimeoutMillis=0是 不阻塞继续执行
    • nextPollTimeoutMillis>0 是阻塞到nextPollTimeoutMillis后继续执行

所以nextPollTimeoutMillis=-1和nextPollTimeoutMillis>0且新加入消息执行时间小于顶层消息时间才会需要唤醒。
上述情况下消息队列要不为空,要不消息没到执行时间,这个情况下就要看pendingIdleHandlerCount <= 0是否成立:

message回收池,是Message类静态Message变量和对象内部的next组成的链式调用,另外 还有最大数量,当前状态之类的

MessageQueue是通过对象内部mMessages和Message对象内部的next组成的链式调用

画图说明
Handler.jpg
源码阅读总结

耗时,重复事情做的比较,阅读过程中容易丢失参数和目标方法
改成写作式阅读不直接画图快了一些,

改进:
记录方法和参数 这样可以知道来源,不要copy太长的代码

方法内部关系要稍微想想表示形式
顺序可以用项目符合,IF ELSE前面加以及条件,同步加前后符号---------

画图画主要方法和参数其他省略,尽量减少时间消耗

上一篇 下一篇

猜你喜欢

热点阅读