Window是什么
Window是Android中的可见窗口,也是Android中唯一的可见视图,包括Activity、Dialog、PopupWindow、Toast等都是通过Window来显示视图的。
Window是个抽奖的概念,它是以View的形式存在的,也可以是说Window其实就是一个View,只不过这个View是通过WindowManager进行管理的。
在Android中,窗口可分为三类:
1. 应用程序窗口 (Application Window)。是通常的、顶层的应用程序窗口。最常见的就是Activity的窗口。
2. 子窗口(Sub Window)。与顶层窗口相关联,必须依附于其他窗口。token必须设置为它所附着的宿主窗口的token。比如说,PopupWindow就是子窗口。
3. 系统窗口(System Window)。 用于特定的系统功能。使用时需要特殊权限。 比如说,状态栏(Status Bar), 导航栏(Navigation Bar), 壁纸(Wallpaper), 来电显示窗口(Phone),锁屏窗口(KeyGuard), Toast等等。
这三种Window的实质都是View,比如说Activity,Activity是个载体,它不负责视图的绘制,而是交给它内部的PhoneWindow类进行绘制的,而PhoneWindow最重要的是DecorView,最后用户看到的就是DecorView。
WindowManager
WindowManager(简称WM)继承了ViewManager,ViewManager只有三个方法:
public void More addView(View view, ViewGroup.LayoutParams params);
public void More updateViewLayout(View view, ViewGroup.LayoutParams params);
public void More removeView(View view);
一个View经过WindowManager的addView之后,就变成一个Window。
具体关于WindowManager的机制,以后再说。
总结:
- Window是个抽象的概念。
- Window以View的形式存在。
- 每一个Window都对应着一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系。
- 通过WindowManager进行管理。
至于具体的源码分析等网上已经有太多的优秀博客了,我就不重复造轮子了。
推荐:
http://blog.youkuaiyun.com/luoshengyang/article/details/8462738