Android 系统中比较重要的系统服务ActivityManagerService(AMS)和 WindowManagerService(WMS),PackageManagerService(PMS)。
定义
AMS:ActivityManagerService 负责管理Activity的生命周期的,AMS还借助ActivityStack是来把所有的Activity按照后进先出的顺序放在一个堆栈中。在Android系统中只有一个AMS的实例,他负责管理系统中所有的Activity,管理、调度这些Activity的生命周期。在Android系统系统的过程中,在SystemServer进程中把AMS服务启动起来,注册到ServiceManager中。
————————————————
WMS:WindowManagerService 负责管理系统中所有的窗口,包括Activity的窗口、壁纸窗口、输入法窗口、弹窗子窗口等,即管理屏幕上展示上的一切窗口。在Android系统系统的过程中,在SystemServer进程中也把WMS服务启动起来,注册到ServiceManager中。
————————————————
PMS:管理着所有跟 package 相关的工作,常见的比如安装、卸载应用。
————————————————
先看一张图-AMS和WMS涉及的类:
详解AMS:
1).ActivityManagerServices,简称 AMS,服务端对象,负责系统中所有 Activity 的生命周期。 2).ActivityThread,App 的真正入口。当开启 App 之后,调用 main()开始运行, 开启消息循环队列,这就是传说的 UI 线程或者叫主线程。与 ActivityManagerService 一起完成 Activity 的管理工作。
3).ApplicationThread,用来实现 ActivityManagerServie 与 ActivityThread 之间的 交互。在 ActivityManagerSevice 需要管理相关 Application 中的 Activity 的生命 周期时,通过 ApplicationThread 的代理对象与 ActivityThread 通信。
4).ApplicationThreadProxy,是 ApplicationThread 在服务器端的代理,负责和客 户端的 ApplicationThread 通信。AMS 就是通过该代理与 ActivityThread 进行通 信的。 5).Instrumentation,每一个应用程序只有一个 Instrumetation 对象,每个 Activity 内都有一个对该对象的引用,Instrumentation 可以理解为应用进程的管家, ActivityThread 要创建或暂停某个 Activity 时,都需要通过 Instrumentation 来进 行具体的操作。
6).ActivityStack,Activity 在 AMS 的栈管理,用来记录经启动的 Activity 的先后 关系,状态信息等。通过 ActivtyStack 决定是否需要启动新的进程。
7).ActivityRecord,ActivityStack 的管理对象,每个 Acivity 在 AMS 对应一个 ActivityRecord,来记录 Activity 状态以及其他的管理信息。其实就是服务器端的 Activit 对象的映像。 8).TaskRecord,AMS 抽象出来的一个“任务”的概念,是记录 ActivityRecord 的栈, 一个“Task”包含若干个 ActivityRecord。AMS 用 TaskRecord 确保 Activity 启动和 退出的顺序。如果你清楚 Activity 的 4 种 launchMode,那么对这概念应该不陌 生。
[图片上传中...(image.png-c635d9-1619582584474-0)]
详解WMS
1).WindowManagerService 负责管理系统中所有的窗口,包括Activity的窗口、壁纸窗口、输入法窗口、弹窗子窗口等,即管理屏幕上展示上的一切窗口。在Android系统系统的过程中,在SystemServer进程中也把WMS服务启动起来,注册到ServiceManager中。
2).Session 官方解释 This class represents an active client session. There is generally one Session object per process that is interacting with the window manager。应用程序进程通过Session对象与WMS进行通信,每个应用程序进程中有一个Session对象。
3).WindowState 官方解释 A window in the window manager。在WMS中描述一个Window。
4).WindowToken 官方解释 Container of a set of related windows in the window manager. Often this is an AppWindowToken, which is the handle for an Activity that it uses to display windows. For nested windows, there is a WindowToken created for the parent window to manage its children.用来描述WMS中一个Window的信息。
5).AppWindowToken 官方解释 Version of WindowToken that is specifically for a particular application (or really activity) that is displaying windows.用来描述一个Activity在WMS中对应的Window的信息。
6).SurfaceSession 官方解释 An instance of this class represents a connection to the surface flinger, from which you can create one or more Surface instances that will be composited to the screen.通过该对象能与SurfaceFlinger服务通信,来创建一个Surface.
————————————————
详解PMS
APK 的安装流程如下所示:
1).复制 APK 到/data/app 目录下,解压并扫描安装包。
2).资源管理器解析 APK 里的资源文件。
3).解析 AndroidManifest 文件,并在/data/data/目录下创建对应的应用数据目录。
4).然后对 dex 文件进行优化,并保存在 dalvik-cache 目录下。
5).将 AndroidManifest 文件解析出的四大组件信息注册到 PackageManagerService 中。
6).安装完成后,发送广播。