8.Window与WindowManager

1.概述

  1. 所有视图都通过Window来呈现,包括Activity/Dialog/Toast等,Window是View的直接管理者;
  2. WindowManager是外界访问Window的入口;
  3. Window的具体实现在WindowManagerService中,WindowManage与WindowManagerService的交互式IPC过程。

2.关键类图

8.Window与WindowManager

3.重点关注WindowManager的3个方法:addView/updateView/removeView

3.1 添加Window的过程

  1. 检查参数是否合法,若是子Window还需进一步调整布局参数;
  2. 创建ViewRootImpl并将View添加到列表中,桥接模式由WindowManagerGlobal来完成;
  3. 通过ViewRootImpl的setView方法完成更新界面并完成Window的添加过程。
    WindowManager.addView -> WindowManagerGloabal.addView -> ViewRootImpl.setView -> WindowManagerService

3.2 删除Window的过程

  1. 找到待删除View的索引index;
  2. removeViewLocked方法内部通过ViewRootImpl的die方法完成,并将view加到mDyingViews列表中。
    WindowManager.removeView -> WindowManagerGlobal.removeView -> ViewRootImpl.die

3.3 更新Window的过程

  1. 更新View的LayoutParams并替换老的LayoutParams;
  2. 更新ViewRootImpl中的LayoutParams.
    WindowManager.updateView -> WindowManagerGlobal.updateLayoutView -> ViewRootImpl.setLayoutParams