ActivityThread

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

大神:https://dev.qq.com/topic/5923ef85bdc9739041a4a798

http://blog.csdn.net/zy00000000001/article/details/53442878

先这样吧(等以后忘了,看看笔记能快速串联起来,要不然还要去看源码)

仅用于个人学习,所以写的简单粗暴

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容