第5课_AMS是啥
热度🔥:88 免费课程
授课语音
AMS(Activity Manager Service)介绍
Activity Manager Service
(AMS)是 Android 操作系统中的一个核心服务,负责管理应用程序的生命周期、任务栈(Task Stack)、应用的启动与停止等。AMS 是 Android 系统中用于协调和调度各个应用程序的核心服务之一,承担着极其重要的职责。AMS 通过管理所有活动(Activity
)、服务(Service
)、广播(Broadcast
)和任务栈,确保系统的正常运行和多任务处理。
1. AMS 的核心职责
AMS 负责管理以下几个方面:
1.1 管理应用程序的生命周期
- 启动 Activity:AMS 负责根据不同的启动模式(如
standard
、singleTop
、singleTask
)来启动应用程序中的Activity
。AMS 会协调不同的任务栈并决定在哪个栈中启动 Activity。 - 切换 Activity:AMS 控制不同应用之间的切换,管理任务栈的前后台切换。
- 暂停、停止和销毁 Activity:AMS 在任务栈中维护所有运行的 Activity 的状态,当系统资源不足或发生系统事件时,AMS 会根据策略来暂停或销毁 Activity。
1.2 任务栈管理
- 任务栈:Android 系统采用 任务栈(Task Stack)的方式来管理应用的
Activity
,每个任务栈是一个由多个Activity
组成的栈,栈中的Activity
按照启动顺序排列。一个应用的所有Activity
都会被推入到同一个任务栈中。 - 任务栈操作:AMS 负责任务栈的管理,支持任务栈的切换、返回、恢复等操作。当用户切换应用时,AMS 会处理当前栈和目标栈之间的转换。
1.3 处理 Activity 的启动模式
- AMS 通过启动模式(
launchMode
)来控制Activity
在任务栈中的行为:standard
:每次启动都会创建一个新的Activity
实例,加入当前任务栈。singleTop
:如果当前栈顶已经有该Activity
,则不会再创建新的实例,而是复用栈顶的Activity
。singleTask
:该Activity
在系统中只有一个实例,且所有关联的Activity
会被放到该实例的任务栈中。singleInstance
:系统中只有该Activity
一个实例,且会单独占用一个任务栈。
1.4 任务调度和优先级
- 前台和后台进程管理:AMS 负责应用的前台和后台进程的管理,当一个
Activity
进入后台时,AMS 会管理该进程的状态,必要时会停止后台进程以释放资源。 - ANR(Application Not Responding)处理:AMS 会监控应用的响应情况,如果某个
Activity
超过一定时间没有响应用户输入,AMS 会触发 ANR 异常,终止该Activity
并给出错误提示。
1.5 启动其他组件
- AMS 还负责启动系统中的其他重要组件,比如服务(
Service
)和广播接收器(BroadcastReceiver
)。AMS 通过管理这些组件的生命周期,确保它们能在正确的时机启动和停止。
2. AMS 启动流程
Android 系统的 AMS 负责整个应用生命周期和任务栈的管理。下面是一个简化的 AMS 启动和管理 Activity
的流程:
2.1 启动 Activity
当一个应用请求启动一个 Activity
时,AMS 负责调度和管理:
- 请求发送:应用通过
Intent
向系统发起启动Activity
的请求。Intent
中包含了目标Activity
的信息、启动方式、传递的参数等。 - AMS 处理请求:AMS 收到请求后,会根据
Intent
处理该请求:- 判断是否需要启动新的
Activity
实例,或者复用已有的实例(取决于launchMode
)。 - 根据当前任务栈的状态,决定将
Activity
加入哪个任务栈。
- 判断是否需要启动新的
- 任务栈管理:如果任务栈中已经存在该
Activity
,AMS 可能会根据启动模式的不同,选择复用现有的Activity
或者重新创建一个新的Activity
实例。 - Activity 创建:如果需要创建新的
Activity
实例,AMS 会调用Activity
的生命周期方法,完成创建、启动、显示等操作。 - 切换到目标
Activity
:AMS 完成目标Activity
的初始化后,会让其显示在屏幕上,并确保新的Activity
成为当前可见的前台Activity
。
2.2 任务栈切换
当一个 Activity
启动或切换时,AMS 会进行任务栈的管理:
- 新的任务栈:如果启动的
Activity
是通过singleTask
或singleInstance
启动的,AMS 会为它创建一个新的任务栈。 - 任务栈切换:如果目标
Activity
已经存在于其他任务栈中,AMS 会进行任务栈的切换,确保Activity
显示在当前栈中。 - 任务栈的返回:当用户按下返回按钮时,AMS 会管理返回栈中的
Activity
,并决定当前Activity
是否需要销毁。
3. AMS 与 Activity 生命周期
AMS 负责控制应用程序的 Activity
生命周期。每当一个 Activity
进入后台或从后台返回时,AMS 会决定是否暂停、停止或销毁该 Activity
。
3.1 生命周期管理
- Activity 启动:AMS 会处理
Activity
的启动,通过Activity
类的生命周期方法(如onCreate()
、onStart()
、onResume()
)管理Activity
的初始化。 - Activity 暂停:当
Activity
进入后台时,AMS 会调用onPause()
方法,并根据系统资源情况决定是否销毁该Activity
或将其保留在任务栈中。 - Activity 销毁:当系统资源紧张或用户显式关闭
Activity
时,AMS 会调用onDestroy()
方法销毁Activity
,释放资源。
4. AMS 的 IPC(进程间通信)
AMS 本身作为系统服务,提供了进程间通信(IPC)接口,允许应用程序跨进程访问其他组件(如 Activity
、Service
)。
- IPC 调用:当一个应用请求启动
Activity
或绑定服务时,AMS 会通过 Binder 机制与目标组件进行通信,确保请求正确处理。 - 跨进程通信:应用程序可以通过
Intent
向 AMS 发送请求,AMS 会启动对应的服务或Activity
,并返回执行结果。
5. AMS 与其他服务的协作
AMS 与多个系统服务协作来完成复杂的任务调度。比如:
- PackageManagerService(PMS):在启动
Activity
之前,AMS 会通过PackageManagerService
查询应用包信息,确保目标Activity
存在且可启动。 - WindowManagerService(WMS):AMS 会与
WindowManagerService
配合,管理Activity
的窗口显示。WMS
负责将Activity
显示在屏幕上并处理窗口的切换。 - AppOpsService:AMS 会与
AppOpsService
协作,确保应用具有执行特定操作的权限(如启动 Activity、发送广播等)。
6. 总结
Activity Manager Service
(AMS)是 Android 系统中至关重要的服务,负责应用程序的启动、生命周期管理、任务栈的操作以及与其他系统服务的协作。AMS 通过调度任务栈和管理 Activity 生命周期,确保应用程序能够高效地运行并响应用户交互。AMS 的工作原理为 Android 提供了灵活的多任务管理机制,支持不同的启动模式、任务栈切换和前后台切换等功能。