理解Window和WindowManager
Window表示一个窗口的概念,日常开发接触不多,类似悬浮窗这种东西就需要Window实现。
- Window本身是一个抽象类,创建需要通过WindowManage。
- WindowManage是外界访问Window的入口,Window具体实现位与WindowManagerService中。
- WindowManager和WindowManagerService的交互是一个IPC过程。
- Android所有试图都是通过Window来呈现的,不管是Activity还是Toast或是Dialog,它们的试图实际都是附加在Window上的。
- 所以Window实际上View的直接管理者。
使用Window
WindowManager所提供的功能能简单,对于开发者来说常用的只有三个功能:
这三个方法定义在ViewManager中,二WindowManager继承ViewManager。
以下为ViewManager代码:
public interface ViewManager {
void addView(View var1, LayoutParams var2);
void updateViewLayout(View var1, LayoutParams var2);
void removeView(View var1);
}
Window的内部机制
Window是一个抽象的概念,每一个Window都对应这一个View和ViewRootImpl,Window和View是通过ViewRootImpl来建立联系的,因此Window并不存在,它是View的形式存在的,这一点可以从WindowManager的定义可以看出来,它提供的三个接口方法都是针对View的,这说明View才是Window的主体。 在实际使用中无法直接访问Window,对Window的访问必须通过WindowManager。
|