WMS 启动流程

WMS 启动流程,第1张

WMS作为系统的一个关键服务其是在SystemServer.java::startOtherServices中启动的

WMS主要有下面几个作用:

1:应用程序通过WMS向SurfaceFinger申请surface,surface代表的是绘图表面,应用程序绘制都必须在绘图表面上.

2:管理窗口的层级,一个窗口一般在WMS端都是一个WindowState,其是有层级区分的,其有baseLayer和subLayer两个值共同确定.

3:窗口动画:WindowAnimator

其中上面有一个比较重要的对象PhoneWindowManager,主要是负责窗口管理的各种策略

AMS,WMS之间数据是对应的,通过token值可以在AMS,WMS,应用程序之后来唯一确定一组Window,token是关联着一组窗口的,可能有多个WindowState的token值是相同的.

整个启动过程涉及3个线程: system_server主线程, “android.display”, “android.ui”, 整个过程是采用阻塞方式(利用Handler.runWithScissors)执行的. 其中WindowManagerService.mH的Looper运行在 “android.display”进程,也就意味着WMS.H.handleMessage()在该线程执行。

本文主要是基于android10.0.0来讲述下WMS的启动流程

WMS作为系统的一个关键服务其是在SystemServer.java::startOtherServices中启动的

WMS主要有下面几个作用

1:应用程序通过WMS向SurfaceFinger申请surface,surface代表的是绘图表面,应用程序绘制都必须在绘图表面上

2:管理窗口的层级,一个窗口一般在WMS端都是一个WindowState,其是有层级区分的,其有baseLayer和subLayer两个值共同确定

3:窗口动画:WindowAnimator

其中上面有一个比较重要的对象PhoneWindowManager,主要是负责窗口管理的各种策略

WindowManagerPolicy mPolicy---------------->对应的实现类PhoneWindowManager,主要是窗口管理的策略和按键的处理

final ActivityManagerInternal mAmInternal------>对应的是AMS,持有AMS对象

final ActivityTaskManagerInternal mAtmInternal--->管理Task的,android10.0新增

final ArraySet<Session>mSessions = new ArraySet<>()---->会话,主要是建立和surfaceFinger的连接

final WindowHashMap mWindowMap = new WindowHashMap()---->缓存windowstate

AMS,WMS之间数据是对应的,通过token值可以在AMS,WMS,应用程序之后来唯一确定一组Window,token是关联着一组窗口的,可能有多个WindowState的token值是相同的

整个启动过程涉及3个线程: system_server主线程, “android.display”, “android.ui”, 整个过程是采用阻塞方式(利用Handler.runWithScissors)执行的. 其中WindowManagerService.mH的Looper运行在 “android.display”进程,也就意味着WMS.H.handleMessage()在该线程执行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7858196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存