Android ViewTreeObserver活了多久?

问题描述 投票:1回答:2

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

我必须重现死/不活的ViewTreeObserver问题,看看我的代码在生产中是否运行良好。我没有在android文档中看到任何东西来重现它。

我感谢任何帮助/指针。

谢谢

android android-viewtreeobserver
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. 包含视图的当前活动将被销毁

0
投票

如果在附加视图之前调用getViewTreeObserver,则返回变量mFloatingTreeObserver。当附加视图时,第一个观察者的听众将与父母的听众合并,你获得的第一个getViewTreeObserver将不再活着,因为kill()merge方法中被调用

© www.soinside.com 2019 - 2024. All rights reserved.