1、app 在启动activity 的时候都会调用 startActivity,看源码如下,从图1--->图3,最终调用了AMS的startActivity 方法。
![](https://img.haomeiwen.com/i459397/9dfb7ed673c592c2.png)
![](https://img.haomeiwen.com/i459397/d5a2f7ce0d252fa9.png)
然后会调用Instrumentation 中的 execStartActivity() 方法
![](https://img.haomeiwen.com/i459397/2c2a99b9415565ff.png)
2、调用回到AMS中,ActivityStarter 调用startActivityMayWait()方法
![](https://img.haomeiwen.com/i459397/6a4bea7f5da050e2.png)
![](https://img.haomeiwen.com/i459397/d87642cd8e91c1b4.png)
![](https://img.haomeiwen.com/i459397/69173b3a7ef84ee8.png)
![](https://img.haomeiwen.com/i459397/343d03f40f544fc4.png)
![](https://img.haomeiwen.com/i459397/f814adad943d024a.png)
![](https://img.haomeiwen.com/i459397/de1d3f196faf1813.png)
然后在调用ActivityStackSupervisor中的resumeFocusedStackTopActivityLocked
![](https://img.haomeiwen.com/i459397/5d194f84adf4eb19.png)
然后在调用ActivityStack 中的resumeTopActivityUncheckedLocked
![](https://img.haomeiwen.com/i459397/aa790824c71632fd.png)
![](https://img.haomeiwen.com/i459397/ed6c14f6a04ff984.png)
在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(),下面具体看看内部是怎么调用的
![](https://img.haomeiwen.com/i459397/9dc70d3318aa59b5.png)
3、看到scheduleLaunchActivity这个方法是不是豁然开朗,app.thread实际上就是ActivityThread.我们再看看这个方法
![](https://img.haomeiwen.com/i459397/72599581e9fa9732.png)
![](https://img.haomeiwen.com/i459397/a619b4dc74771967.png)
![](https://img.haomeiwen.com/i459397/d46c3bb0ca625249.png)
![](https://img.haomeiwen.com/i459397/d1e37ddea0b2d352.png)
流程图:
![](https://img.haomeiwen.com/i459397/2f47bc2e41c4cf2f.png)
![](https://img.haomeiwen.com/i459397/48bdb5f5c89a2c6e.png)
总结:
1、Instrumentation对象到底起了什么作用,其实相当于是一个管家,涉及到Activity很多生命周期的操作都会通过Instrumentation。
2、启动一个Activity的时候会先执行当前Activity的onPause()方法,然后再去执行将要启动Activity的onCreate()的原因
3、在Activity执行完onResume()方法之后,调用makeVisible()方法,才会真正的把视图展示出来。
网友评论