Window(待续)

来源:互联网 发布:ios抹除数据 编辑:程序博客网 时间:2024/06/06 01:22

Window Activity View三者间关系

Activity其实不是显示视图(直观上感觉是它),实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面。

Window的操作

Window的add、delete、update操作过程需要通过 WindowManager 的来实现,WindowManager 是一个接口,它的真正实现是WindowManagerImpl 类。而WindowManagerImpl则将操作全部交给 WindowManagerGlobal 来处理。

ArrayList< View> mViewsArrayList< ViewRootImpl> mRootsArrayList< WindowManager. LayoutParams> mParamsArraySet< View> mDyingViews

在上面的声明中,mViews 存储的是所有 Window 所 对应的View, mRoots 存储的是所有 Window 所对应的 ViewRootImpl, mParams 存储的是所有 Window 所对应的布局参数,而 mDyingViews 则存储了 那些正在被删除 的 View 对象, 或者说是那些已经调用 removeView 方法但是删除操作还未完成的 Window 对象。 在 addView 中通过如下方式将 Window 的一系列对象添加到列表中:

root = new ViewRootImpl( view. getContext(), display); view. setLayoutParams( wparams); mViews. add( view);mRoots. add( root); mParams. add( wparams);

通过 WindowSession 最终来完成 Window 的添加过程。 在下面的代码中, mWindowSession 的 类型是 IWindowSession,它是一个 Binder 对象,真正的实现类是 Session,也就是 Window 的添加过程 是一次 IPC 调用。
在 Session 内部会通过 WindowManagerService 来实现 Window 的操作,如此一来,Window 的操作请求就交给 WindowManagerService去处理 了,在 WindowManagerService 内部会为每一个应用保留一个 单独的 Session。

原创粉丝点击