Android Framwork源码-AMS随记

Android Framwork源码-AMS随记,第1张

Android Framwork源码-AMS随记

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 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中发送事件ActivityThread中的Handler对象mH收到159事件,处理通过反射创建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将从PMS查到的应用数据,序列化传给ActivityThread;ActivityThread发送给Handler发送bindApplaction事件通过反射实例化Instrumentation对象:负责生命周期的管理通过Instrumentation对象反射实例化new Applaction对象appInstrumentation调用callApplactionOnCreate(app)Applaction.onCreate()AMS将查到的根Activity(LaunchActivity )信息封装到Callback中给到ActivityThreadActivityThread发送变量为159的事件;Handler处理事件,从Callback中取出LaunchActivity信息调用hanldeLaunchActivity通过Instrumentation对象反射实例化newActivity()出对象activity调用activity.attach(),在attach中创建WMS的代理类;Instrumentation调用callActivityonCreate(activity)Activty.onCreate()

下图中4-5中少了上面6-18的步骤:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5712444.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存