窗口管理系统是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传递给WMSWindowManagerImpl #addView WindowManagerGlobal#addView ViewRootImpl#setView ViewRootImpl#requestLayout ViewRootImpl#scheduleTraversals session#addToDisplay //将W传给WMS WindowManagerService#addWindow
新闻热点
疑难解答