windwo和window manager

除了View的三大流程以外,View常见的回调方法也是需要掌握的,比如构造方法,onAttach 、onAttach,onVisibilityChanged、onDetach等。

ViewRoot对应于ViewRootImpl类,它的连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。

在ActivityThread中,当Activity对象被创建完后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl丢下和DecorView建立关联。

  • Android中所有的视图都是通过Window来呈现的
  • 不管是Activity,Dialog还是Toast,它们的视图实际上都是附加在Window上的
  • Window是View的直接管理者
  • Window并不是实际存在的,view是window存在的实体

Window的三种类型

Window的内部机制

Window是一个抽象的概念,每个Window对应一个View和一个ViewRootImpl

WindowManager

无法直接访问window,对window的访问必须通过windowmanager

WindowManager继承了ViewManager,常用的只有三个方法addview,updateViewLayout,removeView.

WindowManager操作window更像是在操作window中的view

Activity创建->window创建->DecorView创建->ViewRootImpl创建

activity的视图是怎么附属到window上的?

setContentView() ,通过window添加到decorview中,回到activity的onContentChanged ,回调activity的onResume , makeVisible()

makeVisible方法 中调用了

windowmanager的addview方法 ,并将decorview visible。

WindowManagerGlobal内部的3个列表

  • mViews 存所有Window对应的View
  • mRoots存所有Window对应的ViewRootImpl
  • mParams存所有Window对应的布局参数
  • mDyingViews存正在被删除的View对象(调用了removeView但删除操作还未完成的Window对象)

ViewRootImpl

1.在哪创建的?

windowmanager&addview()方法内部

2.存在哪

存在windowmanagerglobal的几个成员list

mRoots存储的是所有Window所对应的ViewRootImpl

![image-20200722004538052](.windwo和window manager_images/image-20200722004538052.png)

3.通过ViewRootImpl来更新界面并完成window的添加过程

ViewRootImpl&setView方法完成,


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!