一、Activity Manager 的作用及重要性
Activity Manager 在 Android 系统中扮演着至关重要的角色。它负责管理应用程序的 Activity 的生命周期,包括启动、暂停、恢复和销毁等操作。同时,它还管理着任务栈和返回栈,控制着用户在不同 Activity 之间的导航。此外,Activity Manager 还负责进程管理,决定何时启动新的进程以及何时终止旧的进程,以优化系统资源的使用。
二、关键组件和数据结构
-
ActivityStack
- 代表 Activity 的任务栈,用于管理 Activity 的顺序和状态。
- 包含多个 ActivityRecord 对象,每个 ActivityRecord 对应一个 Activity 的实例。
-
ActivityRecord
- 表示一个 Activity 的运行实例,包含了 Activity 的各种信息,如包名、类名、启动模式、状态等。
- 用于跟踪 Activity 的生命周期变化,并与 ActivityStack 协作管理 Activity 的任务栈。
-
ProcessRecord
- 代表一个运行中的应用进程,包含了进程的 ID、名称、状态以及所属的应用包名等信息。
- Activity Manager 使用 ProcessRecord 来管理应用进程的生命周期,包括启动、停止和监控进程的状态。
三、核心方法分析
-
startActivity()
- 启动一个新的 Activity 的入口方法。
- 首先进行一系列的权限检查和参数验证,确保启动的 Activity 是合法的。
- 然后根据启动模式和任务栈的规则,决定如何将新的 Activity 添加到合适的任务栈中。
- 最后通过与系统服务交互,触发 Activity 的启动流程。
-
finishActivity()
- 用于结束一个 Activity。
- 从当前任务栈中找到对应的 ActivityRecord,并将其标记为结束状态。
- 触发 Activity 的销毁流程,释放相关资源。
-
manageAppProcesses()
- 管理应用进程的方法。
- 根据系统的资源状况和进程优先级,决定是否启动、停止或调整应用进程的状态。
- 与内存管理、电源管理等系统服务协同工作,确保系统的稳定性和性能。
四、部分源代码示例
以下是 ActivityManagerService.java 中的部分关键代码:
public class ActivityManagerService extends IActivityManager.Stub
implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
// Activity 任务栈列表
final ArrayList<ActivityStack> mActivityStacks = new ArrayList<>();
// 启动 Activity
public final int startActivity(IApplicationThread caller, Intent intent,
String resolvedType, IBinder resultTo, String resultWho, int requestCode,
int startFlags, ProfilerInfo profilerInfo, Bundle bOptions) {
// 权限检查和参数验证
...
// 根据启动模式和任务栈规则处理 Activity 的启动
...
// 与系统服务交互启动 Activity
...
return START_SUCCESS;
}
// 结束 Activity
public final void finishActivity(IBinder token, int resultCode, Intent resultData,
int finishTask) {
// 找到对应的 ActivityRecord
ActivityRecord r = isInStackLocked(token);
if (r!= null) {
// 标记 Activity 为结束状态
r.finishing = true;
// 触发 Activity 的销毁流程
...
}
}
// 管理应用进程
private void manageAppProcessesLocked(String processName, int uid, int[] gids,
int runtimeFlags, long pkgPrivateUsage, long ident, boolean hostingType,
boolean disableHiddenApiChecks, boolean persistent, boolean isolated,
boolean profileableFromShell, boolean mountExternal, int seInfo,
String seUser, boolean isTopApp, String abiOverride, String instructionSet,
boolean isTrustedSystemApp, int creatorPid) {
// 根据系统资源状况和进程优先级进行处理
...
// 启动、停止或调整应用进程的状态
...
}
}
五、总结
Activity Manager 的源码实现了复杂而强大的功能,通过对 Activity 的生命周期、任务栈和进程的精细管理,确保了 Android 系统的稳定性和高效性。理解 Activity Manager 的源码对于深入了解 Android 系统的工作原理以及进行高级应用开发和系统优化都具有重要的价值。