0
点赞
收藏
分享

微信扫一扫

Android 探究View onDetachedFromWindow 触发时机


文章目录

  • ​​handleDestroyActivity​​
  • ​​performDestroyActivity 的作用​​
  • ​​r.window.clearContentView()​​
  • ​​wm.removeViewImmediate(v)​​
  • ​​removeView 触发 onDetachedFromWindow​​

handleDestroyActivity

当 Activity 销毁的时候,​​ActivityThread​​ 的 handleDestroyActivity 方法会执行,精简版如下:

Android 探究View onDetachedFromWindow 触发时机_android studio


简单说一下,每个方法的含义:

performDestroyActivity 的作用

Android 探究View onDetachedFromWindow 触发时机_赵彦军_02

  • activity mFinished 变量置为 true
  • Android 探究View onDetachedFromWindow 触发时机_覆写_03

  • 2、mInstrumentation.callActivityOnDestroy 会触发 Activity onDestroy 回调

r.window.clearContentView()

Android 探究View onDetachedFromWindow 触发时机_android studio_04

​DecorView​​ 遍历移除所有子View

Android 探究View onDetachedFromWindow 触发时机_覆写_05

wm.removeViewImmediate(v)

​wm​​​ 是 ​​WindowManager​​​ 的意思 。在这里其实是 ​​WindowManagerImpl​​ 实例

​v​​​ 是 ​​DecorView ​

Android 探究View onDetachedFromWindow 触发时机_android studio_06

​mGlobal​​​ 是 ​​WindowManagerGlobal​​ 实例

Android 探究View onDetachedFromWindow 触发时机_Window_07

​removeViewLocked() ​

Android 探究View onDetachedFromWindow 触发时机_覆写_08


先看看 ​​view.assignParent(null);​

​view​​​ 就是 ​​DecorView ​

Android 探究View onDetachedFromWindow 触发时机_Window_09


把 ​​DecorView ​​​ 的 ​​mParent​​ 置为 null 。

​DecorView ​​​ 的 ​​mParent​​​ 原来是​​ViewRootImpl​​​, ​​assignParent (null) ​​​的意思是:​​DecorVIew 和 ViewRootImpl 断开连接。​

在来看 ​​root.die(immediate);​

root 是 ViewRootImpl 实例

Android 探究View onDetachedFromWindow 触发时机_Window_10


​doDie​

Android 探究View onDetachedFromWindow 触发时机_android studio_11

​dispatchDetachedFromWindow​

Android 探究View onDetachedFromWindow 触发时机_Window_12


​mView​​​ 是 ​​DecorView ​

又因为 ​​DecorView​​​ 没有覆写 ​​dispatchDetachedFromWindow​​​ , 所以我们要看 ​​ViewGroup​​​ 的 ​​dispatchDetachedFromWindow​​ 方法。

Android 探究View onDetachedFromWindow 触发时机_android studio_13


遍历子view , 调用其 dispatchDetachedFromWindow 方法,然后再调用 ​​super.dispatchDetachedFromWindow​

我们看看 View 的 ​​dispatchDetachedFromWindow​

Android 探究View onDetachedFromWindow 触发时机_赵彦军_14


调用 ​​onDetachedFromWindow();​​​ , 然后调用 ​​OnAttachStateChangeListener​​​ 的 ​​onViewDetachedFromWindow​​ 方法。

由于,当前是 DecorVIew , 所以我们看看 他的 ​​onDetachedFromWindow​​ 方法。

Android 探究View onDetachedFromWindow 触发时机_覆写_15

​cb.onDetachedFromWindow();​​ 就会触发 Acitivity 的 onDetachedFromWindow 方法。

结束了,下班。

removeView 触发 onDetachedFromWindow

Android 探究View onDetachedFromWindow 触发时机_覆写_16



举报

相关推荐

0 条评论