android开发window和windowmanager
来源:互联网 发布:网络数据包截获 转发 编辑:程序博客网 时间:2024/05/29 09:58
Window是一个抽象类,具体实现是PhoneWindow。创建一个Window只需要通过WindowManager即可WindowManager是外界访问Window的入口,Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService的交互是一个IPC过程。Android中的所有试图都是通过Window呈现的。无论是Activity、Dialog、Toast,他们的视图实际上都是附加在Window上的,因此Window实际是View直接管理者。
Flags参数表示Window的属性,通过这些选项可以控制Window的显示特性。
Window有三种类型,分别是应用Window、子Window和系统Window,应用类Window对应着一个Activity。子Window不能单独存在,它需要附属在特定的父Window之上,比如常见的一些Dialog就是一个字Window。系统Window是需要特定声明权限才能够创建的Window,比如Toast和系统状态栏这些都是系统Window。
Window会有层的概念,层级大的会覆盖在层级小得Window上面。在三类Window中,应用层Window的层级范围是1-99,字Window的层级范围是1000-1999,系统Window的层级范围是2000-2999,因此系统Window会覆盖子Window,应用层Window优先级最低,层级范围对应WindowManager.LayoutParams的type参数。
系统级Window所需要的权限为SYSTEM_ALERT_WINDOW
Window继承与ViewManager,其中有三个重要的方法:addView,updateViewLayout,removeView
Window是一个抽象的概念,每一个Window都对应着一个View和ViewRootImpl,Window和View是通过ViewRootImp联系起来的,因此Window并不是真实存在的他是以View的形式存在的,这一点从WindowManager的定义也可以看出,他提供的三个接口方法addView、updateViewLayout和removeView都是直接针对View的,这说明View才是Window存在的实体。
Window的添加过程需要通过WindowManager的addView实现,WindowManager是一个接口,他的真正实现是WindowManagerImpl。而在WindowManagerImpl内部并没有真正实现Window的三大操作,而是全部交给了WindowManagerGlobal,WindowManagerGlobal以工厂的形式向外提供自己的实例。WindowManager这种工作模式是典型的桥接模式,将所有操锁全部委托给WindowManagerGlobal来来实现。
View的最终绘制过程是由ViewRootImpl的setView内部调用requestLayout来完成的。
View是Android中的视图呈现方式,但是View不能单独存在,他必须依附在Window上,因此有视图的地方就有Window。因此Android中的Activity、Dialog、Toast等视图都对应着一个Window。
Activity的启动最终是会由ActivityThread中的performLaunchActivity来完成整个启动过程,在这个方法内部会通过类加载器去创建Activity的实例,并调用attach方法为其关联运行过程中所依赖的上下文环境变量。
Toast基于Window实现,但是由于Toast具有定时取消这一功能,所以系统采用了Handler。Toast属于系统Window。
Taost的显示和隐藏实际上是通过Toast中的TN这个类来实现的,他有两个方法show和hide,分别对应Toast的显示和隐藏,由于这两个方法是被NMS以跨进程的方式调运的,因此他们运行在Binder线程池中。为了将执行环境切换到Toast所在的线程,在他们的内部使用了Handler.
- android开发window和windowmanager
- Android Window 和 WindowManager
- Android 理解Window 和 WindowManager
- Android的Window和WindowManager
- Android的Window和WindowManager
- Android的Window和WindowManager
- 【Android学习】Window和WindowManager
- android应用开发之Window,View和WindowManager
- android艺术开发探索之window和windowmanager
- 《Android开发艺术探索第八章读书笔记》-Window和WindowManager
- 《Android开发艺术探索》第八章Window和WindowManager小结
- 理解Window和WindowManager(Android开发艺术探索读书笔记)
- Window和WindowManager(Android开发艺术探索学习笔记)
- Android开发艺术探索读书笔记-理解Window和WindowManager
- Android窗口Window和WindowManager详解
- 【Android API】理解Window和WindowManager
- 读书笔记-Android开发艺术探索-第8章-理解Window和WindowManager
- 利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记
- 学习Pandas(一)
- 笔试题(二)—— sql语句
- 1G→2G→3G→4G→5G:一部波澜壮阔的移动通信史
- JAVA中BigInteger的使用
- 百度富文本编辑器 UEditor 1.4.3 getContent会报错:Uncaught TypeError
- android开发window和windowmanager
- 广东省中医鼻窦炎CT费用
- 算法竞赛学习笔记(c++)
- Rxjava传值的使用
- Json 基础详解
- ubuntu 16.04/ansible-openstack-Newton
- newcoder在线编程3--电话号码分身
- 12/3训练日记
- 代码可读性实践