首页 > 系统 > Android > 正文

Android 窗口管理子系统框架分析

2019-11-09 18:37:21
字体:
来源:转载
供稿:网友

         窗口管理系统是Android中的主要子系统之一,它涉及到App中组件的管理,系统和应用窗口的管理和绘制等工作。由于其涉及模块众多,且与用户体验密切相关,所以它也是Android当中最为复杂的子系统之一。一个App从启动到主窗口显示出来,需要App,ActivityManagerService(AMS),WindowManagerService(WMS),SurfaceFlinger(SF)等几个模块相互合作。App负责业务逻辑,绘制自己的视图;AMS管理组件、进程信息和Activity的堆栈及状态等等;WMS管理Activity对应的窗口及子窗口,还有系统窗口等;SF用于管理图形缓冲区,将App绘制的东西合成渲染在屏幕上。下面分几个部分进行分析。

        窗口管理系统的主要框架及各模块之间的通讯接口大体如下:

       下面是各个类之间的关系:

下面在看startActivity操作后的函数调用先后顺序:

S1:Apk1进程中进行启动

Activity#startActivityActivity#startActivityForResultInstrumentation#execStartActivityActivityManagerNative#getDefault().startActivityActivityManagerPRoxy#startActivity

S2:System_server进程中AMS进行调度ActivityMangerService#startActivityActivityMangerService#startActivityAsUserActivityStackSupervisor#startActivityMayWaitActivityStackSupervisorr#startActivityLockedActivityStackSupervisorr#startActivityUncheckedLockedActivityStack#startActivityLockedActivityStackSupervisor#resumeTopActivitiesLockedActivityStack#resumeTopActivityLockedActivityStack#resumeTopActivityInnerLockedActivityStackSupervisor#startSpecificActivityLockedActivityManagerService#startProcessLockedProcess#start

S3:Apk2进程中进行applicationThread的传递

ActivityThread#mainActivityThread#attachActivityManagerProxy#attachApplication

S4:System_server进程中AMS通过ApplicationThreadProxy发起调度

ActivityManagerService#attachApplicationActivityManagerService#attachApplicationLockedActivityStack#realStartActivityLocked

ApplicationThreadProxy#scheduleLaunchActivity

S5:Apk2完成Activity的启动ApplicationThread#scheduleLaunchActivityActivityThread#queueOrSendMessageH#handleMessageActivityThread.handleLaunchActivity

        ActivityThread.handleConfigurationChanged        ActivityThread.performConfigurationChanged                ComponentCallbacks2.onConfigurationChanged

       S5-1:执行Launch        ActivityThread.performLaunchActivity

                Instrumentation#newActivity//实例化Activity

                S5-1-1:创建Application                LoadedApk.makeApplication                Instrumentation.callApplicationOnCreate                          Application.onCreate

                S5-1-2:创建Window                activity.attach //创建一个window实例                 Instrumentation.callActivityOnCreate                          Activity.performCreate                                 Activity.onCreate

                                       PhoneWindow#setContentVIew

                                                       S5-1-2-1:创建根视图DecorView,并将布局加载到DecorView中

                                                       PhoneWindow#installDecor                                                                   PhoneWindow#generateDecor

                Instrumentation.callActivityonRestoreInstanceState                          Activity.performRestoreInstanceState                                 Activity.onRestoreInstanceState       S5-2:执行Resume

       ActivityThread.handleResumeActivity

                 S5-2-1:执行进行Activity生命周期回调                ActivityThread.performResumeActivity                         Activity.performResume                         Activity.performRestart                                Instrumentation.callActivityOnRestart                                       Activity.onRestart                         Activity.performStart                                Instrumentation.callActivityOnStart                                       Activity.onStart                                Instrumentation.callActivityOnResume                                       Activity.onResume

                 S5-2-2:将DecorView传递给WMS

                WindowManagerImpl #addView                          WindowManagerGlobal#addView                                   ViewRootImpl#setView                                             ViewRootImpl#requestLayout                                                       ViewRootImpl#scheduleTraversals                                            session#addToDisplay //将W传给WMS                                                      WindowManagerService#addWindow


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表