【问题标题】:How long is Android ViewTreeObserver alive?Android ViewTreeObserver 还能活多久?
【发布时间】:2016-11-06 06:38:28
【问题描述】:

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

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

感谢任何帮助/指点。

谢谢

【问题讨论】:

    标签: android android-viewtreeobserver


    【解决方案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. 当前包含视图的activity被销毁

    【讨论】:

    • 否,在ViewTreeObserver类的“void merge(ViewTreeObserver observer)”这个方法中被调用了。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2021-10-29
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多