AMS家族

注:移除了Android7.0中的ActivityManagerProxy,代替它的是IActivityManager,作为AMS在本地的代理。
AMS的启动过程
在SystemServer进程中启动。
SystemServer.run()中创建SystemServiceManager——用来对系统的服务进行创建、启动和生命周期管理。
SystemServiceManager.startBootstrapServices()启动了AcitvityManagerService、PowerManagerService、PackageManagerService
SystemServiceManager.startCoreServices()启动了DropBoxManagerService、BatteryService、UsageStatsService和WebViewUpdateService
SystemServiceManager.startOtherServices()启动了CameraService、AlarmManagerService、VrManagerService
AMS与应用程序进程
- 启动应用程序时AMS会检查这个应用程序需要的应用程序进程是否存在
- 如果需要的应用程序进程不存在,AMS就会请求Zygote进程创建需要的应用程序进程
AMS重要的数据结构
ActivityRecord,内部记录了Activity的所有信息,用来描述一个Acitivity
TaskRecord,描述一个Activity任务栈
ActivityStack,管理系统所有的Activity:包括多种实例类型,存储Acitivity所有状态的AcitivityState,定义特殊状态的Activity,维护ActivityRecord、TaskRecord的ArrayList。
Activity栈管理
- Activity任务栈模型

standard:每次启动Activity都会创建一个新的实例。
singleTop:已在栈顶,不会创建新的,调用onNewIntent;如果不在栈顶,创建新的实例。
singleTask:Activity实例已经存在于其归属栈,栈中位于其上的Activity出栈,调用该实例的onNewIntent;要启动的Activity不存在于其归属栈,创建新实例入栈;如果归属栈不存在,创建新栈,然后创建新实例入栈。
singleInstance:已存在实例,onNewIntent;不存在,创建新任务栈,然后创建新实例入栈,并且新栈中只会存在这一个Activity实例。
3. Intent的FLAG
如果LaunchMode和FLAG设定的启动方式有冲突,以FLAG为准。
4. taskAffinity
指定Activity希望归属的任务栈
(1)与FLAG_ACTIVITY_NEW_TASK或者singleTask配合。
(2)与allowTakReparenting配合实现任务栈转移,从调用栈转移到更亲近的栈中。