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。