¿Cómo funciona Choreographer?

Yo estaba estudiando sobre el código del marco de Android (v4.1).

Sé que el mensaje de la interfaz de usuario desencadenado por invalidate() ahora se publica en Choreographer en lugar de UI messageQueue directamente, y estos mensajes no se ejecutarán hasta que llegue la siguiente señal VSYNC .

Antes de que se ViewRootImpl esta operación de publicación, ViewRootImpl llama a postSyncBarrier() Looper una vez para bloquear la UI MessageQueue, lo que significa que los mensajes que se publican en messagesQueue posteriormente no se ejecutarán hasta que se quite este bloque, lo que sucede antes de la función performTraversals() .

Con base en el entendimiento anterior,

Si se performTraversals() otro invalidate() incluso una vez dentro de performTraversals() (como onDraw() de cualquier instancia de vista), ¿se bloqueará siempre el mensaje messageQueue de la interfaz de usuario?

A partir de observaciones prácticas, sé que esto nunca sucede.
Entonces, ¿dónde estoy equivocado?

Creo que puede obtener la respuesta a esta pregunta mirando el código de scheduleTraversals :

 void scheduleTraversals() { if (!mTraversalScheduled) { mTraversalScheduled = true; mTraversalBarrier = mHandler.getLooper().postSyncBarrier(); mChoreographer.postCallback( Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); if (!mUnbufferedInputDispatch) { scheduleConsumeBatchedInput(); } notifyRendererOfFramePending(); } } 

Después de la primera llamada a scheduleTraversals mTraversalScheduled se establece true. Las llamadas posteriores no tienen ningún efecto, postSyncBarrier no se llama y no se coloca ninguna segunda barrera en la cola, hasta que se llama a postSyncBarrier .

  • Android Studio - "Android framework se detecta en el proyecto"
  • Cómo cargar la aplicación directamente sin iniciar la pantalla de inicio
  • Construyendo módulos Android separados con dexpreopt deshabilitado
  • Cómo solucionar java.lang.NoSuchMethodError: android.widget.AbsListView.isItemChecked
  • Android "Marco de aplicaciones" Docs / Tuts
  • Barra de navegación de Android en el lado editando AOSP
  • "Demasiadas referencias de atributos" warning
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.