阅读前言:欢迎评论、一起交流学习,如有错误及不足,望海涵,如这篇文章对您有用,麻烦帮忙点点小蛋糕,谢谢您的喜欢~
第一步:startActivity()-----activity.java
AMS核心 : 对Activity启动的管理
第二步:进入startActivityforResult()的mInstrumentation.execStarActivity()-----activity.java
第三步:进入Instrumentation类的execStartActivity()
(版本号小于9.0通过Binder跨进程执行)AMS----->startActivity()
(目前√ 版本号大于9.0通过Binder跨进程执行)ATM----->startActivity()
ATM如何获得?主播Kitty马上为你揭晓答案!

第四步:跨进程进入ATM(AMS)服务的startActivity()(Binder方式)
ATM服务如何获得的?(揭晓答案)
(1)通过ActivityTaskManager.getService()进入ActivityTaskManager.java

(2)这里用到了代理模式!(重点)通过
final IBinder b = ServiceManager.getService(Context.ACTIVITY_TASK_SERVICE);
拿到ATM服务

(3)拿到ATM服务,通过ATM跨进程的方式,进入到ActivityTaskManagerService.java执行startActivity()

第五步:判断需要启动的Activity所在的进程是否已经启动(AMS中)
进程存在(直接启动):realStartActivityLocked()是热启动
进程不存在:mService.startProcessAsync();fork进程 是冷启动

第六步:如果进程不存在,AMS通过socket通知zygote进程fork反射创建一个新进程ActivityThread(Activity所需的进程)
第七步:通过ActivityThread的main方法中的attachApplication方法把APP进程的的applicationThread给到AMS
(1)attach

(2)拿到AMS----->跨进程调用AMS的Application,Activity通过attachApplication把applicationThread传给AMS(Binder方式)

第九步:AMS中执行realStartActivityLocked()
第十步:AMS拿到applicationThread发送scheduleLaunchActivity到APP进程(Binder方式)
第十一步:APP进程中执行ApplicationThread-------(发送消息H.LAUNCH_ACTIVITY---Handler方式)----->ActivityThread----------(handleLaunchActivity)--------->Activity.onCreate()



1065

被折叠的 条评论
为什么被折叠?



