详细篇幅地址
- java层具体方法说
- navtie层方法说明
-
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前面加以及条件,同步加前后符号---------
画图画主要方法和参数其他省略,尽量减少时间消耗
网友评论