一、window相关
Window可以说是Android Framework层提供的一个最基础的UI组件管理类,PhoneWindow是它的唯一实现类。它屏蔽了开发者与WindowManagerService的交互,统一了UI设计,并统一接收用户交互事件,比如背景、title和按键事件等。
Activity/Dialog/Toast的UI展现都是依赖于Window来完成。对于UI编写,开发者只需要使用View相关即可。View最终会以ContentView的形式设置给Window:
PhoneWindow.java
public void setContentView(int layoutResID) {
}
DecorView是PhoneWindow的根ViewGroup。Window提供了一些列的配置项,不同的配置项DecorView的UI组成会有一定的不同。
二、WindowManager
一个Window会有一个WindowManager。提到WindowManager就要提到WindowManagerGlobal。他们之间的区别是:
WindowManager : 它负责管理一个Window,并提供一系列对Window进行配置的flag。
WindowManagerGlobal : 它是一个单例类,负责管理应用所有的Window(其实并不是很严谨,应该是管理所有的ViewRootImpl)。并且它含有与WindowManagerService通信的Binder。
WindowManager所提供的API其实都是用来操作WindowManagerGlobal中的ViewRootImpl。比如WindowManager.addView(contentView)实际上是在WindowManagerGlobal中创建了一个与contentView对应的ViewRootImpl。
三、VIewRootImpl
它负责管理一个具体的View Tree,比如DecorView及其所有子View。具体有下面这些职责:
通过与WindowManagerSe