除了Binder 进程间通信机制,Handler 机制可能是Android 最重要的机制了。Android 应用应用程序是通过消息来驱动的。我们一起来看下Handler 涉及到的内容。
Handler 原理
- Looper#loop 死循环从MessageQueue 中获取Message 执行。
- Handler 通过send/post 向MessageQueue 中add Message,通过remove 从MessageQueue 中remove Message。
- MessgaeQueue 中没有Message 时阻塞,但是不消耗cpu 资源。
Handler 初始化流程
- Looper#prepare,最后epoll_create 创建epoll 句柄,epoll_ctl 将被监听的描述符添加到epoll句柄。
- Looper#loop,最后epoll_wait 等待事件触发。
Handler sendMessage 流程
- MessageQueue#enqueueMessage,将Message 加入到MessageQueue。
- MessageQueue#nativeWake,最后write 唤醒epoll_wait 的Task。
IO 复用
参考
IO 多路复用是什么意思?
epoll 的本质是什么?:入门
Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
我读过的最好的epoll讲解–转自”知乎“
IO多路复用的三种机制Select,Poll,Epoll
为什么epoll会那么高效
select/poll/epoll对比分析