我刚刚研究了Android框架的代码(v4.1).
我知道invalidate()现在触发的UI消息直接发布到Choreographer而不是UI messageQueue,并且在下一个VSYNC信号到来之前不会执行这些消息.
在执行此post操作之前,ViewRootImpl调用Looper postSyncBarrier()一次以阻止UI MessageQueue,这意味着稍后发送到messagesQueue的消息将不会被执行,直到该块被删除,这在函数之前发生performTraversals().
基于以上理解,
如果
invalidate()在其中的某个地方performTraversals()(例如onDraw()任何视图实例)中调用了另一个,则永远会阻止UI messageQueue?
从实际观察中,我知道这种情况从未发生过.
那么,我哪里错了?