handleBindApplication
1,生成LoadedApk、Instrumentation、调用Instrumentation.init()方法

LoadedApk类里面调用了makeApplication(), makeApplication方法里面通过调用Instrumentaition的newApplication()和callApplicationOnCreate()来生成Application实例并调用onCreate方法

2,handleLaunchActivity方法
生成activity实例,

进入performLaunchActivity方法
通过管家Instrumentation.newActivity()生成activity(内部classLoader.loadClass().newInstance())

然后,调用activiyt的attach方法,里面生成PhoneWindow,绑定Instrumentation(每个activity都指向ActivityThread类中的Instrumentation变量),绑定WindowManager;接着调用activity的onCreate方法;

接下来进入handleResumeActivity()方法;首先调用activity的onResume方法;然后有一坨代码很关键!!

就是下面wm.addView()的方法,这是真正将view添加到window上面并且显示出来的方法。

添加view到window的时序图:然后后调用ViewRootImpl类里面的measue,layout.draw

网友评论