一、AMS的主要作用:
1、统一调度Activity
(1)AMS中的重要数据类:
ProcessReccord:保存该进程中包含的APK信息、内存状态信息用于内存回收、组件列表
ActivityRecord:binder类可用于IPC调用(此处为WMS中调用),保存所有Acitivity信息,包括基本属性信息(包名、进程名、文件路径、图标主题等)和运行状态信息(idle、stop、finishing等)
TaskRecord:任务栈信息,管理Activity的启动和退出顺序。
除此之外,在frameworks\base\services\core\java\com\android\server\am路径中,还有serviceRecord、ProviderRecord、BoardRecord、ProcessRecord、UidRecord等近50个AMS相关的类。
(2)重要变量
如后台的Activity和近期任务的Activity最多20个,onpause必须在0.5秒内执行完,Activity必须在10秒内完成启动并回调给AMS。
(3)启动Activity
Acitivity的启动最终都会调用startActivity(),总体上就是ActivityThread和AMS和WMS的交互过程,详细过程这里不描述,大体流程如图,
Application加载后,先加载provider,然后才加载Activity。
2、内存管理
(1)关闭而不退出
应用关闭后,进程并未退出
(2)内存不够用时,Activity按优先级县回收后台的Activity,或使用OOM进程回收内存
3、进程管理
android一般是多进程单窗口的,因为WMS只会派发消息到当前窗口,其他后台的进程窗口接收不到窗口派发的消息。
二、AMS类的binder通信实现