类图
流程
一个Activity对应一个ViewRootImpl 对应一个Window 一个WindowManagerImpl WindowManagerGlobal是个单例类 一个进程只有一个实例 他管理所有Window的ViewRootImple,DecorView ,LayoutParams
Activity -->attach -->mWindow = new PhoneWindow(this, window, activityConfigCallback); -->mWindow.setWindowManager( (WindowManager)context.getSystemService(Context.WINDOW_SERVICE), mToken, mComponent.flattenToString(), -->mWindowManager=((WindowManagerImpl)wm).createLocalWindowManager(this) public void setWindowManager(WindowManager wm, IBinder appToken, String appName, boolean hardwareAccelerated) { mAppToken = appToken; mAppName = appName; mHardwareAccelerated = hardwareAccelerated; if (wm == null) { wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); } mWindowManager = ((WindowManagerImpl)wm).createLocalWindowManager(this);//这里创建WindowManagerImpl add remove update交给WindowManagerGlobal }
WindowManagerGlobal
// Window的DecorView集合 private final ArrayList<View> mViews = new ArrayList<View>(); // DecorView的管理者ViewRootImpl的集合 private final ArrayList<ViewRootImpl> mRoots = new ArrayList<ViewRootImpl>(); // Window布局参数的集合 private final ArrayList<WindowManager.LayoutParams> mParams = new ArrayList<WindowManager.LayoutParams>();