谈谈对 AMS 的理解--标准答案
2021-01-24 本文已影响0人
一方乌鸦
详细讲解:
http://liuwangshu.cn/tags/ActivityManagerService/
1.AMS的作用
AMS是一个注册到ServiceManger的Binder Server,它的所有功能都列在IActivityManager中。
主要分为4类。
1)组件状态管理。这个组件指的是四大组件。如startActivity,startService等。
2)组件状态查询。如getCallingActivity,getServices。
3)Activity Task管理。可以将跨进程的Activity装进同一Task,可以复用系统资源,也符合使用习惯。
4)其他。如系统运行时信息查询,比如内存占用量,等。
2.AMS的成员
- Athread() 用来循环接收事件
- ActivityStack 记录系统中所有的 Activity 的状态,将不同状态的 Activity 放进不同的栈中
- ActivityTask 可以将跨进程的Activity装进同一Task,可以复用系统资源,也符合使用习惯
3.startActivity流程
这个事情太复杂了,只能简单说一部分步骤。
1)Client(可以是Launcher,也可以是已启动的App)通过binder IPC通知AMS startActivity。
2)AMS startActivityAsUser 对调用者进行权限检查。(binder 的安全性)
3)AMS startActivityMayWait 通过intent查找要启动的Activity。如果Activity是显示的,直接通过反射创建,如果是隐式的,还要跨进程去PMS查询匹配的Activity。
- AMS 检查并使用 Socket 通知 Zygote 创建进程,进程创建成功后 attachApplication 通知AMS进程创建成功。
5)以上所有的准备操作都完成后,AMS 调用 realStartActivityLocked() 开始 Activity 的生命周期。