学习android的窗口模块一周多了,感觉自己对这个模块的理解还是比较模糊,先把get的知识点记录一下。
下图是学习过程记录的activity窗口启动过程序列图,没有或者没办法完整的描绘出来,整个过程比较复杂:
整个学习过程中是参照老罗的android之旅博客和《深入理解android内核设计思想》一书来辅助的,非常感谢前辈。
Activity的整体启动过程可查看Android4.4 framework分析——Launcher中启动应用程序(startActivity)的过程的序列图,本文关注Activity窗口创建细节部分(也许不够细)。
step3~step13,是Activity上下文Context的创建过程,Activity本身是Context的间接子类,而此处创建的ContextImpl与它们的关系,可查看Android与设计模式——装饰者(Decorator)模式一文。step3~step13的详细分析,建议查看老罗的Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析,这篇文章写的比较详细。
step14~step16,是PhoneWindow的创建,我们标题提到的Activity窗口其实就是这个,所有的View都是在这window上建立起来的。
step19~step22,是WindowManager的创建过程。
step24~step33,是DecorView的创建过程,这个DecorView后面会被add到PhoneWindow里。
step40~step42,XXXActivity的onResume()的调用过程,标志着这个activity要被显示出来了。
step47,开始将窗口添加到WMS中。
step50,ViewRootImpl创建了。
step51~step57,将window与WMS关联起来了,WMS中将会记录这个window的相关信息。
step63,将逐步将我们在xml文件中的布局添加到ViewRootImpl中。
后面会用SurfaceFlinger来关联Surface之类的,这部分C++代码不太理解,整个过程还有不少地方需要加深理解,继续啃代码。。。。
右键复制图片地址,在浏览器中打开即可查看大图。
未完待续,有不对的地方,请指正。