Android Handler随记_暮冬一十四的博客-CSDN博客
Android Binder随记_暮冬一十四的博客-CSDN博客
Android Zygote随记_暮冬一十四的博客-CSDN博客
Android Framwork源码-PMS随记_暮冬一十四的博客-CSDN博客
AMS(ActivityManagerService)
在SystemServer的进程中,是SystemServer中的一个对象;
作用:
- 管理activity的生命周期
- 启动activity
- 与PMS进行交互
ActivityThread
- 每个应用有一个ActivityThread;是应用的入口;
- 在APP进程中
- 是AMS的缓存中心
- ActivityThread中的List<ActivityRecord> activtes放了activity的启动记录
应用内activity与activity的跳转是跨进程通信,还是同一个进程内通信?
跨进程通信;
Activity->AMS:
- 调用activity.startActivity()
- 通过ActivityManage.getService("activity")得到AMS的BpBinder;
- 通过BpBinder发送请求,调用AMS的startActivity()
AMS->PMS:
- AMS和PMS都在SystemServer进程中,都是SystemServer中一个对象
- 通过包名和PMS里的缓存mPackage查询到App对应的Package
- 使用activity的类名通过PMS里的内部类PackageManagerInternalImpl查询到activity对应的包装类ResolveInfo; ps:ResolveInfo这个javabean里有activityInfo、ServiceInfo等变量,查询啥就给哪个变量赋值,再返回ResolveInfo;
- 得到ResolveInfo里的activityInfo;
- 将activityInfo返回给App进程的ActivityThread;
- ActivityThread中的Handler对象mH收到事件
- 通过反射创建Activity对象
- 将Activity对象放到activtes启动记录中
点击桌面App图标发生了什么?
- 点击的APP图标是在单独的Luancher进程,是一个系统App进程
- Luancher进程请求SystemServer进程中的AMS去创建应用的根Activity(AndroidMnifest.xml中initen-fifter为Luanche的activity)
- AMS请求zygote进程创建App进程;zygote进程比较特殊, 使用Socket通信,而不是binder;zygote是所有应用的孵化器,zygote进程挂掉时,手机会自动重启;
- zygote进程去fork出App进程
- App进程通过binder告诉AMS应用App进程准备就绪
- AMS请求App进程启动根Activity
|