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进行合成,合成之后就可以在屏幕的缓冲区显示
网友评论