第八章 理解Window和WindowManager
8.2 Window的内部机制
- 每一个Window都对应一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系,因而Window并不实际存在,它以View的形式存在。
View不能单独存在,必须附着在Window这个抽象的概念上。
Activity、Dialog等需要呈现视图的地方都对应一个Window。
8.3 Window的创建过程
8.3.1 Activity的Window创建过程
在启动过程中会调用attach方法为其关联运行过程中所以来的一系列上下文环境变量。
在Activity的attach方法里,系统会创建Activity所属的Window对象并为其设置回调接口,Window对象的创建通过PolicyManager的makeNewWindow方法实现。
由于Activity实现了Windowd的Callback接口,因此当Window接收到外界的状态变化时会回调Activity的方法。
Window更多表示的是一种抽象的功能集合,虽说早在Activity的attach方法中Window就已被创建,但是这个时候由于DecorView并没有被WindowManager识别,所以这个时候得Window无法提供具体功能,因为它还无法接受外界的输入信息。在ActivityThread的handleResumeActivity方法中,首先会调用Activity的onResume方法,接着会调用Activity的makeVisible(),在这方法中,DecorView真正地完成添加和显示,Activity的视图才能被用户看到。