В моем приложении у меня есть бесконечный цикл в одном из моих переопределений View onMeasure(). Отлаживая исходный код, начиная с точки останова в моем onMeasure, я могу проследить весь путь до трассировки стека до меры PhoneWindow $DecorView() (самый верхний класс в моей иерархии представлений), который вызывается ViewRoot.performTraversals(). Теперь отсюда, если я продолжу переходить, я в конечном итоге получаю метод PhoneWindow $DecorView(), вызванный снова сообщением в классе Looper.loop(). Я угадываю, что что-то поставило в очередь сообщение, которое нужно переделать, например, недействительным.
Мой вопрос в том, что вызывает срабатывание вызова измерения в представлении?
Из моего понимания процесса компоновки/измерения/рисования это будет происходить только тогда, когда метод invalidate() вызывается в определенном представлении, и это будет просачиваться вниз и выполнить проход макета/меры/рисования для этого представления, недействительным и всех его детей. Я бы предположил, что каким-то образом мой самый верхний вид в моей иерархии просмотров становится недействительным.
Однако я явно поставил точку останова на каждый отдельный вызов invalidate, который у меня есть, и я не называю invalidate каким-то бесконечным образом. Поэтому я не думаю, что это так. Есть ли другой способ инициировать передачу меры? Может ли что-то внутренне инициировать это? Я немного из идей, увидев, что ничто не является беспринципным.