我只是在研究Android框架(v4.1)的代码。
我知道现在触发的UI消息是直接发布到Choreographer而不是UI messageQueue的,这些消息要等到下一个VSYNC信号到来invalidate()
时才会执行。
在执行此发布操作之前,ViewRootImpl
调用 Looper 的postSyncBarrier()
一次以阻塞 UI MessageQueue,这意味着稍后发布到 messagesQueue 的消息将在此块被删除之前不会被执行,这发生在 function 之前performTraversals()
。
基于以上理解,
如果在某个地方(例如任何视图实例)中
invalidate()
甚至调用了另一个,那么 UI 消息队列会永远被阻止吗?performTraversals()
onDraw()
从实际观察中,我知道这永远不会发生。
那么,我哪里错了?