我正在开发一个应用程序来监听View事件,例如滚动,使用ViewTreeObserver绘制的布局。 ViewTreeObserver有一个方法可以在做任何事情之前检查它是否还活着。添加听众。
我必须重现死/不活的ViewTreeObserver问题,看看我的代码在生产中是否运行良好。我没有在android文档中看到任何东西来重现它。
我感谢任何帮助/指针。
谢谢
事实上,如果你检查ViewTreeObserver类的源代码,有一个“kill”函数将mAlive设置为false,也只在这里,但它从不被调用。
/**
* Marks this ViewTreeObserver as not alive. After invoking this method, invoking
* any other method but {@link #isAlive()} and {@link #kill()} will throw an Exception.
*
* @hide
*/
private void kill() {
mAlive = false;
}
在我看来,这个观察者将在以下情况之后变得不可用(但不是无法生存,你不能使用isAlive()来确定当前观察者的状态):
如果在附加视图之前调用getViewTreeObserver
,则返回变量mFloatingTreeObserver
。当附加视图时,第一个观察者的听众将与父母的听众合并,你获得的第一个getViewTreeObserver
将不再活着,因为kill()
在merge
方法中被调用