Activity、Window、View关系

1 setContentView原理是什么

2 Activity在onResume之后才会显示的原因是什么

3 ViewRoot是干嘛的,是view tree的root吗


window就是指phoneWindow,setContentView作用是创建一个DecorView,初始化整个页面的布局,此时建立好了viewTree,但页面并没有显示出来,页面的显示是在调用onResume之后,onResume之后调用了handleResumeActivity,首先拿到Activity里面phoneWindow的DecorView,然后把这个DecorView加到windowManager里面,然后调用makeVisible让它变可见


总结:

1 activity在启动的时候会创建一个phoneWindow,phoneWindow里面有一个DecorView,这个DecorView就是整个activity的viewTree的rootView了,contentView是decorView里面的一部分

2 DecorView对应一个ViewRootImpl对象,这个viewRootImpl是可以和WMS发起双向通信的,通过IWindowSession向WMS发起binder调用,WMS也通过IWindow向ViewRootImpl发起binder调用,

3 viewRootImpl会在WMS中注册一个窗口,WMS会统一管理所有的窗口的大小、位置和层级,在第一次注册时,viewRootImp还会向WMS申请一个serface,有了serface,应用端就可以绘制了,绘制完了之后,serfaceTrigner还会在WMS中根据提供的窗口层级大小位置来对serface进行合成,合成之后就可以在屏幕的缓冲区显示

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容