1.phonewindow是作为view与activity之间的一个管理工具,创建是在activity的attach方法中,作为window的一个实现类。
2.decorview是因为我们的应用可能会有不同的主题,所以需要一个更顶层的view。
加载布局文件,主要就是在setcontentview方法里面创建,调用。
3.viewrootimpl的主要作用是处理view的事件分发,绘制等。
小结
到此,Activity终于完成了他的启动生命周期,界面也显示出来了,也有了成型的Activity。
虽然这中间角色比较多,但是每个角色又不可或缺:
因为需要管理View,创建出了PhoneWindow; 因为需要根据主题显示不同的布局结构,创建出了根ViewDecorView; 因为需要处理View的各种事件,包括绘制、事件分发,创建出了ViewRootImpl。
大家各忙各的,并听命于Activity。
Activity、PhoneWindow、DecorView、ViewRootImpl 之间的关系?
PhoneWindow:是Activity和View交互的中间层,帮助Activity管理View。
DecorView:是所有View的最顶层View,是所有View的parent。
ViewRootImpl:用于处理View相关的事件,比如绘制,事件分发,也是DecorView的parent。
四者的创建时机?
Activity创建于performLaunchActivity方法中,在startActivity时候触发。
PhoneWindow,同样创建于performLaunchActivity方法中,再具体点就是Activity的attach方法。
DecorView,创建于setContentView->PhoneWindow.installDecor。
ViewRootImpl,创建于handleResumeActivity方法中,最后通过addView被创建。
网友评论