Właśnie studiowałem na temat kodu platformy Android (v4.1).Jak działa Choreographer
wiem, że wiadomość UI wywołane przez invalidate()
teraz jest wysłana do choreograf zamiast UI kolejka komunikatów bezpośrednio, a te wiadomości nie będą realizowane dopiero w przyszłym VSYNC sygnał pochodzi.
Przed ta operacja jest wykonywana po, ViewRootImpl
wzywa looper'a postSyncBarrier()
raz w celu zablokowania UI kolejka komunikatów, co oznacza, że wiadomości pocztowe na messagesQueue później nie będą wykonywane, dopóki ten blok jest usuwany, co dzieje się przed funkcją performTraversals()
.
Na podstawie powyższej zrozumienia,
Jeśli inny
invalidate()
nazywa jeszcze raz gdzieś wperformTraversals()
(takich jakonDraw()
żadnej widok przypadkach) UI kolejka komunikatów na zawsze zostać zablokowane?
Z praktycznych obserwacji wiem, że tak się nie dzieje.
Więc, gdzie się mylę?