在我的应用程序中,我的View的onMeasure()重写之一具有无限循环。 从onMeasure的断点开始调试源代码,我可以一直跟踪到堆栈,一直跟踪到PhoneWindow $ DecorView的measure()(在View层次结构中最高级的类),ViewRoot会调用它 .performTraversals()。 现在从这里开始,如果我继续前进,最终将得到Looper.loop()类中的消息再次调用PhoneWindow $ DecorView的measure()。 我猜测某些内容已排队,需要重新衡量,例如无效。
我的问题是,什么触发条件需要在视图上进行度量调用?
根据我对布局/测量/绘制过程的理解,只有在特定视图上调用invalidate()方法时,才会发生这种情况,并且会滴落并为无效的该视图执行布局/测量/绘制过程,并且所有 它的孩子们。 我认为在某种程度上我的视图层次结构中最重要的视图将变得无效。
但是,我已经在我拥有的每个无效调用上都明确指定了一个断点,并且没有以某种无限的方式调用无效。 因此,我认为并非如此。 还有另一种触发测量通过的方法吗? 内部会引起这种情况吗? 在看到没有什么是无限无效之后,我有点想法了。