startActivity流程学习

文章目录

  • 应用完全没有启动过。

应用完全没有启动过。

launcher从sm(管理java层的ServiceManager)的服务列表里面找到AMS的代理对象AMSProxy,调用AMS向Zygote发出socket请求,从Zygote进程fork出一个app进程。

在App获取ams --》getService(“activity”)是比较容易的,它拥有了AMS的代理对象

但是反过来,AMS它是管理我们的APP,那么它是如何调用我们呢?
App里面也存在一个binder对象IApplicationThread接口里面实现了binder(binderApplication方法)

第一次注册的时候会通过ams.attrach(appProxy)方法传给ams
startActivity流程学习_第1张图片

启动另外一个APK,第一阶段是从当前的进程发出指令到AMS
在这里插入图片描述
startActivity流程学习_第2张图片
AMS接收到了创建Activity的请求,分为两种情况判断,一种启动过,一种没有启动过。

如果是没有启动过会通过socket发信息给ZygoteConnect,Zygote接收信息fork出一个新的子进程出来。

新创建出来的app进程通过attach方法调用到mgr.attachApplication(mAppThread,startSeq)方法,将当前app进程的ApplicationThread 的代理对象传到AMS。

之后AMS就能通过调用改对象跟我们app进程进行通讯了。

你可能感兴趣的:(framework)