android framework记录 - GreenShellll/GreenShell GitHub Wiki
77 10. Window、WindowManager以及Activity
-
Window 0. Window有三类:系统Window、应用Window、子Window
-
Window是接口,具体实现类是PhoneWindow
-
Window 是一个抽象概念,我们并不能直接操作window
-
Activity在创建的时候attach方法中会创建Window并使之与Activity关联
-
Window中会创建Decorview,并通过ViewRootImpl与View交互
-
WindowManager 0. 在Activity启动时,handleResumeActivity方法中启动activity的时候,会将主窗口加入到WindowManager中
-
我们并不能直接操作window,而是通过WindowManager
-
WindowManagerImpl是其实现类,他将view增删改的操作交给 WindowManagerGlobal处理
-
WindowManagerGlobal 中会调用 ViewRootImpl的方法
-
ViewRootImpl通过IWindowSession与WindowManagerService交互
78 11. 理解Window和WindowManager
-
Window用于显示View和接收各种事件,Window有三种类型:应用Window(每个Activity对应一个Window)、子Window(不能单独存在,附属于特定Window)、系统window(Toast和状态栏)
-
Window分层级,应用Window在1-99、子Window在1000-1999、系统Window在2000-2999.WindowManager提供了增删改View三个功能。
-
Window是个抽象概念:每一个Window对应着一个View和ViewRootImpl,Window通过ViewRootImpl来和View建立联系,View是Window存在的实体,只能通过WindowManager来访问Window。
-
WindowManager的实现是WindowManagerImpl其再委托给WindowManagerGlobal来对Window进行操作,其中有四个List分别储存对应的View、ViewRootImpl、WindowManger.LayoutParams和正在被删除的View
-
Window的实体是存在于远端的WindowMangerService中,所以增删改Window在本端是修改上面的几个List然后通过ViewRootImpl重绘View,通过WindowSession(每个应用一个)在远端修改Window。
-
Activity创建Window:Activity会在attach()中创建Window并设置其回调(onAttachedToWindow()、dispatchTouchEvent()),Activity的Window是由Policy类创建PhoneWindow实现的。然后通过Activity#setContentView()调用PhoneWindow的setContentView。