Lo que activa la medida de una Vista () para llamarse

En mi aplicación, tengo un bucle infinito en una de las anulaciones onMeasure () de mi vista. Al depurar el código fuente a partir de un punto de interrupción en mi onMeasure, puedo rastrear todo el camino hasta el rastro de la pila hasta la medida de PhoneWindow $ DecorView () (la clase más alta en mi jerarquía de vistas), que es llamado por ViewRoot .performTraversals (). Ahora desde aquí, si sigo avanzando, eventualmente recibo la medida () de PhoneWindow $ DecorView llamada nuevamente por un mensaje en la clase Looper.loop (). Supongo que algo ha puesto en cola un mensaje que debe volver a medir, como una invalidación.

Mi pregunta es, ¿qué desencadena que una llamada de medida debe ocurrir en una Vista?

Según tengo entendido el proceso de diseño / medida / dibujo, esto solo ocurrirá cuando se invoque el método invalidate () en una vista específica, y eso goteará y realizará un pase de diseño / medida / dibujo para esa vista invalidada y todo de sus hijos. Asumiría que de alguna manera mi vista más superior en mi jerarquía de vistas se invalida.

Sin embargo, he puesto explícitamente un punto de interrupción en cada llamada de invalidación que tengo, y no estoy llamando a invalidar de alguna manera infinita. Así que no creo que ese sea el caso. ¿Hay otra forma de activar un paso de medida? ¿Podría algo estar provocando esto internamente? Estoy un poco sin ideas después de ver que nada invalida el infinito.

Respuestas a la pregunta(2)

Su respuesta a la pregunta