我正在开发一个应用程序来监听View事件,例如滚动,使用ViewTreeObserver绘制的布局。 ViewTreeObserver有一种方法可以在做任何事情之前检查它是否存活。添加听众。
我必须重现死/不活的ViewTreeObserver问题,看看我的代码在生产中是否运行良好。我没有在Android文档中看到任何内容来重现它。
我感谢任何帮助/指针。
由于
答案 0 :(得分:1)
事实上,如果你检查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()来确定当前观察者的状态):
您删除了侦听器,例如 。view.getViewTreeObserver()removeOnGlobalLayoutListener(本);
包含视图的当前活动已销毁
答案 1 :(得分:0)
如果在附加视图之前调用了getViewTreeObserver
,则返回变量mFloatingTreeObserver
。附加视图后,第一个观察者的侦听器将与父对象的侦听器合并,并且您获得的第一个getViewTreeObserver
将不再存在,因为在该kill()
方法中调用了merge
< / p>