Android ViewTreeObserver活了多久?

时间:2016-07-04 13:44:04

标签: android android-viewtreeobserver

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

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

我感谢任何帮助/指针。

由于

2 个答案:

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

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

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

答案 1 :(得分:0)

如果在附加视图之前调用了getViewTreeObserver,则返回变量mFloatingTreeObserver。附加视图后,第一个观察者的侦听器将与父对象的侦听器合并,并且您获得的第一个getViewTreeObserver将不再存在,因为在该kill()方法中调用了merge < / p>