Android フレームワーク (v4.1) のコードについて勉強していました。
これまでにトリガーされた UI メッセージinvalidate()
は、UI messageQueue ではなく Choreographer に直接ポストされ、これらのメッセージは次のVSYNC信号が来るまで実行されないことがわかっています。
この post 操作が実行される前に、UI MessageQueue をブロックするためにViewRootImpl
Looper をpostSyncBarrier()
1 回呼び出します。これは、後で messagesQueue に投稿されるメッセージは、このブロックが削除されるまで実行されないことを意味します。これは function の前に発生しますperformTraversals()
。
以上の理解に基づき、
別のものが(ビューインスタンスなどの)
invalidate()
どこかで一度でも呼び出された場合、UI messageQueue は永久にブロックされますか?performTraversals()
onDraw()
実際の観察から、これが決して起こらないことを私は知っています。
それで、どこが間違っていますか?