三大服务间的关系(AMS、WMS、PMS)

AMS(Activity Manager Service)

 

  • 核心功能总结
    • Activity 与任务管理:AMS 掌管着 Activity 的生命周期,从 Activity 的启动、暂停、恢复到销毁,都由它来控制。同时,它还管理着任务栈,确保应用内的 Activity 能按照合理的顺序和规则进行切换和管理。
    • 进程管理:负责应用进程的启动、调度和回收。根据系统资源状况和应用的优先级,决定哪些进程可以获得 CPU 时间片,哪些进程需要被回收以释放资源。
    • 与其他服务协作:在启动 Activity 时,AMS 会和 WMS、PMS 紧密合作。一方面向 WMS 提供创建窗口所需的参数,另一方面从 PMS 获取应用的权限信息、组件信息等,以确保 Activity 能够正常启动和运行。
  • 举例:当你点击手机桌面的微信图标启动微信时,AMS 会检查微信是否已经有进程在运行,如果没有,就会启动一个新的进程,然后根据微信启动 Activity 的请求,管理该 Activity 的创建和启动流程,同时与 WMS 沟通创建窗口,从 PMS 处获取微信的权限配置等信息。

WMS(Window Manager Service)

 

  • 核心功能总结
    • 窗口管理:WMS 主要负责窗口的创建、布局、显示和销毁。它根据 AMS 提供的信息,为 Activity、Dialog 等组件创建对应的窗口,并确定窗口在屏幕上的位置、大小和层级关系。
    • 输入事件处理:接收来自底层输入设备(如触摸屏、键盘)的输入事件,并将这些事件准确地分发给对应的窗口和应用组件。
    • 动画与过渡效果:实现窗口切换、显示和隐藏时的动画效果,提升用户体验。
  • 举例:当微信的主界面 Activity 启动时,AMS 通知 WMS 创建一个窗口来显示这个 Activity。WMS 会根据屏幕分辨率、Activity 的布局要求等,确定窗口的大小和位置,然后将窗口显示在屏幕上。当你从微信主界面切换到聊天界面时,WMS 会执行相应的窗口切换动画,让界面过渡更加流畅。

PMS(Package Manager Service)

 

  • 核心功能总结
    • 应用包管理:负责应用的安装、卸载、更新等操作。解析应用的 APK 文件,将应用的代码、资源等文件安装到系统中,并在系统数据库中记录应用的相关信息。
    • 权限管理:在应用安装时,根据应用在清单文件中声明的权限列表,为应用分配相应的权限。在应用运行过程中,检查应用是否具有执行特定操作的权限。
    • 应用信息管理:存储和管理所有已安装应用的元数据,包括应用的名称、图标、版本号、组件信息等,为其他系统服务和应用提供查询接口。
  • 举例:当你从应用商店下载并安装微信时,PMS 会解析微信的 APK 文件,将其安装到系统指定的目录,并在系统数据库中记录微信的包名、版本号、所需权限等信息。当微信启动某个需要相机权限的功能时,AMS 会向 PMS 查询微信是否已经被授予了相机权限,PMS 根据记录进行权限检查并返回结果。

PMS与WMS

应用安装与窗口资源加载

  • 安装时资源解析:当你从应用商店下载并安装微信时,PMS 会对微信的 APK 文件进行解析。APK 文件里包含了微信界面所需的各种资源,比如聊天界面的布局文件、微信图标、聊天气泡样式等。PMS 会仔细解析这些资源信息并存储到系统数据库中。当你首次启动微信,WMS 要创建微信主界面窗口时,就会依据 PMS 解析好的资源信息来加载相应的布局和图片。例如,WMS 会从 PMS 记录的资源路径中找到微信的 logo 图片,并将其显示在微信启动界面上。
  • 运行中资源获取:在使用微信过程中,WMS 会持续从 PMS 提供的资源库中获取所需资源。比如当你打开微信的某个聊天窗口,WMS 需要加载聊天消息的布局和头像等资源。它会根据 PMS 存储的资源索引,准确找到对应的头像图片和消息气泡的布局文件,然后将这些元素组合并显示在聊天窗口中。

应用权限与窗口交互

  • 权限限制窗口功能:微信有一些窗口相关的功能需要特定权限才能使用,例如微信的悬浮窗功能,可让你在使用其他应用时也能查看微信消息。PMS 负责管理微信的权限设置。当你开启微信悬浮窗功能时,WMS 会向 PMS 查询微信是否拥有悬浮窗权限。如果 PMS 显示微信没有该权限,WMS 就不会创建悬浮窗,这样就能防止未经授权的窗口显示,保障系统安全和用户体验。
  • 权限变更影响窗口显示:假设你最初授予了微信摄像头权限,在视频通话时 WMS 可以正常加载摄像头画面到微信视频通话窗口中。但如果后来你在系统设置里撤销了微信的摄像头权限,PMS 会更新微信的权限状态。WMS 在检测到这个权限变更后,会立即停止加载摄像头画面,可能会在视频通话窗口显示一个提示信息,告知你权限已被撤销。

系统状态与窗口管理

  • 应用卸载时窗口关闭:当你决定卸载微信时,PMS 会执行卸载操作。在这个过程中,PMS 会通知 WMS 关闭微信的所有窗口。比如,如果你当时正在微信的聊天窗口或者朋友圈界面,WMS 接收到 PMS 的通知后,会迅速关闭这些窗口,释放相关的系统资源,避免出现窗口残留影响系统界面的整洁和正常使用。
  • 系统更新后窗口调整:当微信进行版本更新时,PMS 会处理更新操作并更新微信的版本信息和配置。如果更新内容涉及到微信界面布局或显示方式的改变,PMS 会将这些新的信息传达给 WMS。例如,新版本微信对聊天列表的布局进行了优化,WMS 会根据 PMS 提供的新布局信息,对微信聊天列表窗口进行重新布局和显示调整,以保证你看到的是更新后的界面效果。

PMS与AMS

PMS 对静态广播 action 的保存

当应用安装时,PMS(Package Manager Service)会解析应用的 AndroidManifest.xml 文件。对于其中静态注册的广播接收器(<receiver> 标签),PMS 会提取广播接收器所监听的 action 等信息,并将这些信息存储在系统数据库中。

以微信为例,假设微信在 AndroidManifest.xml 中静态注册了一个广播接收器用于接收系统电量变化的广播,代码可能如下:

<receiver android:name=".PowerChangeReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
</receiver>

PMS 在安装微信时,会解析这段配置,识别出 PowerChangeReceiver 广播接收器监听的 action 为 android.intent.action.BATTERY_CHANGED,并把这个 action 以及对应的广播接收器类名等信息保存到系统数据库里。

AMS 处理广播时与 PMS 的交互

当系统中有符合特定 action 的广播发出时,AMS(Activity Manager Service)会负责处理广播的分发。AMS 会去查询 PMS 保存的信息,以找到所有监听该 action 的广播接收器。

继续以电量变化广播为例,当系统电量发生变化,发出 android.intent.action.BATTERY_CHANGED 广播时,AMS 会向 PMS 询问哪些应用的广播接收器监听了这个 action。PMS 会根据之前保存的信息,将所有监听该 action 的广播接收器的相关信息(如类名、所在应用包名等)返回给 AMS。

AMS 触发广播接收器执行

AMS 拿到这些信息后,会根据这些信息创建相应广播接收器的实例,并调用其 onReceive() 方法来处理广播。在微信的例子中,AMS 会创建 PowerChangeReceiver 类的实例,并调用它的 onReceive() 方法,让微信能够对电量变化事件做出响应,比如更新界面上的电量显示等。

 

综上所述,PMS 会保存静态广播的 action 信息,而 AMS 在处理广播分发时会依赖 PMS 保存的这些信息来找到合适的广播接收器进行广播的分发和处理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值