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