handleBindApplication
1,生成LoadedApk、Instrumentation、调用Instrumentation.init()方法
image.png
LoadedApk类里面调用了makeApplication(), makeApplication方法里面通过调用Instrumentaition的newApplication()和callApplicationOnCreate()来生成Application实例并调用onCreate方法
image.png
2,handleLaunchActivity方法
生成activity实例,
image.png
进入performLaunchActivity方法
通过管家Instrumentation.newActivity()生成activity(内部classLoader.loadClass().newInstance())
image.png
然后,调用activiyt的attach方法,里面生成PhoneWindow,绑定Instrumentation(每个activity都指向ActivityThread类中的Instrumentation变量),绑定WindowManager;接着调用activity的onCreate方法;
image.png
接下来进入handleResumeActivity()方法;首先调用activity的onResume方法;然后有一坨代码很关键!!
image.png
就是下面wm.addView()的方法,这是真正将view添加到window上面并且显示出来的方法。
image.png
添加view到window的时序图:然后后调用ViewRootImpl类里面的measue,layout.draw
image.png