外观
同步屏障和异步消息有什么用?
标准回答
同步屏障能让适用队列中的同步消息暂时等待,同时允许后面的异步消息越过屏障。在常见 ViewRootImpl 实现中,scheduleTraversals 会插入屏障并通过 Choreographer 安排 traversal,使帧调度相关异步消息能得到处理,随后移除屏障。它用于协调绘制调度,并不改变主线程一次只执行一个任务的事实,也不能打断当前正在运行的长任务。异步消息仍然在对应 Looper 线程执行,不等于线程池任务。
延伸追问
具体 MessageQueue 数据结构和锁实现可能随 Android 分支变化,应抓住屏障的调度语义,不死记所有版本都相同的内部实现。
内容来源
- Android Framework 知识手册 · 原条目
5-7