美文网首页
Handler、Looper、Message、MessageQu

Handler、Looper、Message、MessageQu

作者: ArcherZang | 来源:发表于2020-03-19 17:47 被阅读0次
详细篇幅地址
  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是否成立:

  • 如果成立就 mBlocked = true; continue;
    这情况下我们可以看到源码中mBlocked = true唤醒方法调用起到很大作用。
  • 如果不成,继续往下走nextPollTimeoutMillis=0,就不需要唤醒,会一直执行下去。
    nativePollOnce最终调用了epoll_wait(mEpollFd, eventItems, EPOLL_MAX_EVENTS, timeoutMillis)

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

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

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

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

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

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

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

相关文章

网友评论

      本文标题:Handler、Looper、Message、MessageQu

      本文链接:https://www.haomeiwen.com/subject/neukyhtx.html