App内部activity跳转过程及原理解析

1、app 在启动activity 的时候都会调用 startActivity,看源码如下,从图1--->图3,最终调用了AMS的startActivity 方法。

App内部activity跳转过程及原理解析_第1张图片
图1
App内部activity跳转过程及原理解析_第2张图片
图2

然后会调用Instrumentation 中的 execStartActivity() 方法

App内部activity跳转过程及原理解析_第3张图片
图3

2、调用回到AMS中,ActivityStarter 调用startActivityMayWait()方法

App内部activity跳转过程及原理解析_第4张图片
App内部activity跳转过程及原理解析_第5张图片


App内部activity跳转过程及原理解析_第6张图片


App内部activity跳转过程及原理解析_第7张图片


App内部activity跳转过程及原理解析_第8张图片


App内部activity跳转过程及原理解析_第9张图片

然后在调用ActivityStackSupervisor中的resumeFocusedStackTopActivityLocked

App内部activity跳转过程及原理解析_第10张图片

然后在调用ActivityStack 中的resumeTopActivityUncheckedLocked

App内部activity跳转过程及原理解析_第11张图片


App内部activity跳转过程及原理解析_第12张图片

在resumeTopActivityUncheckedLocked 中调用 ActivityStackSupervisor中的startSpecificActivityLocked 。

1、在这个方法中先判断application启动了没有,如果没有启动调用AMS中的 startProcessLocked,最后调用startProcessLocked()方法来创建新的进程。该方法会通过前面讲到的socket通道传递参数给Zygote进程。Zygote孵化自身。调用ZygoteInit.main()方法来实例化ActivityThread对象并最终返回新进程的pid。调用ActivityThread.main()方法,ActivityThread随后依次调用Looper.prepareLoop()和Looper.loop()来开启消息循环,这个就是Application 的启动流程,在bindApplication后,再次调用需要启动的activity。

2、如果app启动了,程序内调用则执行realStartActivityLocked(),下面具体看看内部是怎么调用的

App内部activity跳转过程及原理解析_第13张图片

3、看到scheduleLaunchActivity这个方法是不是豁然开朗,app.thread实际上就是ActivityThread.我们再看看这个方法

App内部activity跳转过程及原理解析_第14张图片
App内部activity跳转过程及原理解析_第15张图片
App内部activity跳转过程及原理解析_第16张图片
App内部activity跳转过程及原理解析_第17张图片

流程图:

App内部activity跳转过程及原理解析_第18张图片



App内部activity跳转过程及原理解析_第19张图片

总结:

1、Instrumentation对象到底起了什么作用,其实相当于是一个管家,涉及到Activity很多生命周期的操作都会通过Instrumentation。

2、启动一个Activity的时候会先执行当前Activity的onPause()方法,然后再去执行将要启动Activity的onCreate()的原因

3、在Activity执行完onResume()方法之后,调用makeVisible()方法,才会真正的把视图展示出来。

你可能感兴趣的:(App内部activity跳转过程及原理解析)