1

我正在开发一个应用程序,它监听 View 事件,如滚动、使用 ViewTreeObserver 绘制的布局。ViewTreeObserver 有一种方法可以在做任何事情之前检查它是否还活着,例如。添加听众。

我必须重现死/不活 ViewTreeObserver 的问题,以查看我的代码在生产中是否运行良好。我在 android 文档中看不到任何重现它的内容。

我感谢任何帮助/指示。

谢谢

4

2 回答 2

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() 来确定当前观察者的状态):

  1. 您删除了侦听器,例如 view.getViewTreeObserver().removeOnGlobalLayoutListener(this);

  2. 包含视图的当前活动被销毁

于 2016-12-01T22:57:42.443 回答
0

如果getViewTreeObserver在附加视图之前调用,mFloatingTreeObserver则返回一个变量。附加视图后,第一个观察者的侦听器将与父级的侦听器合并,并且getViewTreeObserver您获得的第一个侦听器将不再存在,正如该方法kill()中所调用的那样merge

于 2018-10-02T08:15:01.737 回答