授课语音

AMS(Activity Manager Service)介绍

Activity Manager Service(AMS)是 Android 操作系统中的一个核心服务,负责管理应用程序的生命周期、任务栈(Task Stack)、应用的启动与停止等。AMS 是 Android 系统中用于协调和调度各个应用程序的核心服务之一,承担着极其重要的职责。AMS 通过管理所有活动(Activity)、服务(Service)、广播(Broadcast)和任务栈,确保系统的正常运行和多任务处理。

1. AMS 的核心职责

AMS 负责管理以下几个方面:

1.1 管理应用程序的生命周期

  • 启动 Activity:AMS 负责根据不同的启动模式(如 standardsingleTopsingleTask)来启动应用程序中的 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 负责调度和管理:

  1. 请求发送:应用通过 Intent 向系统发起启动 Activity 的请求。Intent 中包含了目标 Activity 的信息、启动方式、传递的参数等。
  2. AMS 处理请求:AMS 收到请求后,会根据 Intent 处理该请求:
    • 判断是否需要启动新的 Activity 实例,或者复用已有的实例(取决于 launchMode)。
    • 根据当前任务栈的状态,决定将 Activity 加入哪个任务栈。
  3. 任务栈管理:如果任务栈中已经存在该 Activity,AMS 可能会根据启动模式的不同,选择复用现有的 Activity 或者重新创建一个新的 Activity 实例。
  4. Activity 创建:如果需要创建新的 Activity 实例,AMS 会调用 Activity 的生命周期方法,完成创建、启动、显示等操作。
  5. 切换到目标 Activity:AMS 完成目标 Activity 的初始化后,会让其显示在屏幕上,并确保新的 Activity 成为当前可见的前台 Activity

2.2 任务栈切换

当一个 Activity 启动或切换时,AMS 会进行任务栈的管理:

  • 新的任务栈:如果启动的 Activity 是通过 singleTasksingleInstance 启动的,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)接口,允许应用程序跨进程访问其他组件(如 ActivityService)。

  • 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 提供了灵活的多任务管理机制,支持不同的启动模式、任务栈切换和前后台切换等功能。

去1:1私密咨询

系列课程: