外观
Handler Looper MessageQueue 分别负责什么?
标准回答
Handler 负责把 Message 或 Runnable 提交到指定线程,并定义处理方式;MessageQueue 按执行时间等规则管理待处理消息;Looper 在所属线程不断取出可执行消息,再交给对应 Handler 分发。线程调用 Looper.prepare 创建相关环境,loop 开始循环。主线程已经由系统建立 Looper,后台线程可以使用 HandlerThread。Handler 不是执行消息的新线程,new Handler(Looper.getMainLooper()) 绑定的是现有主线程,post 的 Runnable 也在主线程运行。
延伸追问
延迟消息是在提交时进入队列,时间到了且线程有机会执行时才被取出,不是到期后才首次进入队列。
内容来源
- Android Framework 知识手册 · 原条目
5-4