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

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

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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

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

S1:Apk1进程中进行启动

Activity#startActivity

Activity#startActivityForResult

Instrumentation#execStartActivity

ActivityManagerNative#getDefault().startActivity

ActivityManagerProxy#startActivity

S2:System_server进程中AMS进行调度

ActivityMangerService#startActivity

ActivityMangerService#startActivityAsUser

ActivityStackSupervisor#startActivityMayWait

ActivityStackSupervisorr#startActivityLocked

ActivityStackSupervisorr#startActivityUncheckedLocked

ActivityStack#startActivityLocked

ActivityStackSupervisor#resumeTopActivitiesLocked

ActivityStack#resumeTopActivityLocked

ActivityStack#resumeTopActivityInnerLocked

ActivityStackSupervisor#startSpecificActivityLocked

ActivityManagerService#startProcessLocked

Process#start

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

ActivityThread#main

ActivityThread#attach

ActivityManagerProxy#attachApplication

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

ActivityManagerService#attachApplication

ActivityManagerService#attachApplicationLocked

ActivityStack#realStartActivityLocked

ApplicationThreadProxy#scheduleLaunchActivity

S5:Apk2完成Activity的启动

ApplicationThread#scheduleLaunchActivity

ActivityThread#queueOrSendMessage

H#handleMessage

ActivityThread.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值