调用ActivityThread子类ClientTranslationHandler的scheduleTranslation
注意上图有个sendMessage的
接着会执行translacationExecutor的execute方法。
都会走cycleToPath方法
cycleToPath方法对应的performLifecycleSequence 调用Actvitiy各个生命周期。
然后是第二种情况,新启动一个App应用的Activity:调用了AMS的.startProcessLocked方法
调用了自己的startProcess方法然后调用了 Process.start方法,开启一个进程。
zygoteProcess.start开始工作
最终会调用到zygoteSendArgsAndGetResult(openZygoteSocketIfNeeded(abi), argsForZygote)这行代码,这行代码主要用来打开Socket和Zygote进程通信,然后向Zygote进程发送参数,获取结果。这样Zygote进程就会fork出一个应用进程,然后执行应用进程的入口函数也就是我们熟悉的ActivityThread.main()函数。
然后会接着调用attach方法
这样就会调用 AMS的attachApplication最终会调用 1.ActivityThread applicationthread的bindApplication(然后我们进入bindApplication细节看看)
bindApplication方法会sendMessage 一个H.BIND_APPLICATION
那它会到handleBindApplication方法里面
然后就是application的创建和oncreate方法的调用
2.还有他还调用了ActivityStackSupervisor的 attachApplicationLocked
我们终于又看到了realStartActivityLocked,然后就和我们之前分析的realStartActivityLocked完后走加载activity一样了。