android wms各个类的作用,Android APP/AMS/WMS之间交互总结

6999cfdbd212f5a3f8bef1508982d881.png

注:以下内容基于Android API Version 27(Android 8.1)Linux Kernel 3.18.0

AMS/WMS/APP角色概述

AMS

掌管着所有App进程的启动,App四大组件的启动,App之间及App内部页面之间切换和各种组件的生命周期,AMS不控制窗口的显示,只控制各种组件的创建和运行。

WMS

掌管着所有App窗口的层叠计算。WMS被App用来显示自己的窗口,但WMS自己不具备显示能力,WMS只负责综合系统中所有的窗口,计算出叠放顺序和显示区域,然后将窗口信息交给SurfaceFliner,由SurfaceFlinger执行真正的窗口合成和显示。

WMS作为App和SurfaceFlinger的桥梁,将SufaceFlinger为窗口创建的Suface交给App,由App在Surface上进行绘制。

WMS同时为App和input系统牵线搭桥,为事件派发创建通道,将通道的一端链接在input系统另一端交给App,WMS将窗口的焦点信息和位置大小信息交给input系统,以便input系统确定事件的派发目标。

App

App负责四大组件真正的创建和相应生命周期的调用。

App用WMS返回给它的Suface进行绘图,然后通知SurfaceFlinger进行图像合成,App不直接控制Surface的大小和位置,而是通知WMS进行控制,App只管在Surface上绘图。

App、AMS和WMS之间的交互

App进程和AMS

App进程启动的时候将一个实现了IApplicationThread的binder对象交给AMS,以后AMS就用这个IApplicationThread调用App的功能,AMS启动Activity时会为Activity创建一个唯一的token(实现了IApplicationToken的binder对象),将这个token对象交给App进程。

AMS和WMS

AMS最先收到启动Activity的消息,为Activity创建token后将token添加到WMS的一个map中。(AMS和WMS在同一个进程所以可以直接调用)

App进程和WMS

App进程收到AMS启动Activity的调用后创建Activity,然后调用WMS添加和显示窗口。App会为Activity创建一个实现了IWindow的binder对象,将这个binder对象传给WMS,以便WMS检测到App窗口需要调整大小或者焦点时通知App,App同时会将AMS创建的Activity的 token传给WMS,WMS通过传来的token确认之前AMS添加过同样的token,然后为窗口创建WindowState将IWindow和token等信息保存起来。

总结

App通过IActivityManager调用AMS,AMS通过IApplicationThread调用App。

App通过IWindowManager调用WMS,WMS通过IWindow调用App。

IApplicationToken由AMS创建,同时保存于AMS、WMS和App进程,作为一个Activity在三方的唯一凭证。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值