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

3.通过ViewRootImpl来更新界面并完成window的添加过程
ViewRootImpl&setView方法完成,
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!