在我的应用程序中,我在一个View的onMeasure()覆盖方法上有一个无限循环。从我的onMeasure中的断点开始调试源代码,我能够一直追踪自己的堆栈跟踪到PhoneWindow$DecorView的measure()(在我的View层次结构中最顶部的类),该类由ViewRoot.performTraversals()调用。现在从这里继续单步执行,最终会通过Looper.loop()类中的消息再次调用PhoneWindow$DecorView的measure()。我猜想有些内容已经排队等候进行重新测量,比如invalidate。
我的问题是,什么会触发对View进行测量调用?
根据我对布局/测量/绘制过程的理解,这只会在特定视图上调用invalidate()方法时才会发生,并且这将会向下渗透并为其子级执行布局/测量/绘制操作。我假设我的View层次结构中最上面的View被无效了。
然而,我已经在每个invalidate调用上都明确地设置了断点,并没有以某种无限的方式调用invalidate。所以我认为这不是问题所在。是否有其他方法来触发测量调用?可能某些内部内容正在触发它吗?在看到没有东西无限失效之后,我有点束手无策了。
我的问题是,什么会触发对View进行测量调用?
根据我对布局/测量/绘制过程的理解,这只会在特定视图上调用invalidate()方法时才会发生,并且这将会向下渗透并为其子级执行布局/测量/绘制操作。我假设我的View层次结构中最上面的View被无效了。
然而,我已经在每个invalidate调用上都明确地设置了断点,并没有以某种无限的方式调用invalidate。所以我认为这不是问题所在。是否有其他方法来触发测量调用?可能某些内部内容正在触发它吗?在看到没有东西无限失效之后,我有点束手无策了。
invalidate()
。 - Sherif elKhatib