Window和WindowManger
来源:互联网 发布:数码宝贝网络侦探友情 编辑:程序博客网 时间:2024/06/05 20:07
几个简单的概念
首先简单理解下Window和WindowManger是干什么,这里不会涉及到他们的原理,一来我还没学到家,二来要真正理解还是需要通过源码,而这篇笔记主要是记录怎么使用,不会涉及到源码
View(mDecorView):顶级View,就是一个普通的View,只不过它是最上层的View
Window:网上对于window的解释一般都是:window是一个抽象的概念,持有顶级View。所以尼玛这个抽象的概念到底是个什么鬼,这种解释对我们这种新手很不友好啊!这个概念太抽象,我只能强行解释一波。mDecorView和普通View一样(其实它就是继承自FrameLayout),但是它作为顶级View当然要提供一些普通View没有的功能,那这个Window就是用来提供这些功能的。
看看window都提供什么功能——Android的Window类
Android:关于Window少为人知的一面——这篇文章中关于window的解释还是蛮好的,我把结论抄在这里吧
从以上的分析,我们可以得出创建Window的过程其实就是添加View的过程。比如Activity中decorView是作为顶级View添加到系统中去显示,顶级View的LayoutParams必须是WindowManager.LayoutParams类型,否则会报错。那么为什么会有Window的存在,我们直接用添加View形式,创建Activity所需显示的界面不久就了。
这里就又回到最初Window的定义,Window它定义了顶级窗体样式和行为。因为每个Activity都会标题栏,状态栏等,在Window中它提供了DecorView的创建,省去我们不少麻烦,通过Window提供API,我们可以很方面改变标题栏,状态栏的样式。同时Window也提供某些共性操作的行为,比如返回键操作、触摸事件传递,menu显示与因此等。Window最核心的内容还是它提供的顶级View–DecorView及其相关操作。
Activity:为什么有了Window,还要Activity?这个Activity的作用大概是用来提供【界面】的生命周期的。因为Toast和Dialog也是window,但是【界面】和他们不同,它是需要复杂的生命周期的
WindowManager:听名字就知道是用来管理Window的,它最常用的三个方法是addView、updateViewLayout、removeView,这三个方法其实是代理了WindowManagerGlobal的三个方法
WindowManagerGlobal:对于WindowManager而言,WindowManagerGlobal的作用就是提供那三个方法的实现。WindowManagerGlobal持有用来存储顶级View的list、用来存储ViewRootImpl的list,用来存储window对应的WindowManager.LayoutParams的list。但是不持有Window,很奇怪
ViewRootImpl:View和WindowManager的桥梁,WindowManagerGlobal中一些功能的实现,比如WindowManagerGlobal调用ViewRootImpl的方法来绘制View
WindowManager.LayoutParams:window也需要LayoutParams,类比View和ViewGroup.LayoutParams
window的常见用法
悬浮球
保持屏幕常亮
- Window和WindowManger
- Android中的Window和WindowManger
- WindowManger
- 自定义View基础(二)—— 理解Window和WindowManger
- WindowManger与window之详解篇
- WindowManger与window之基础篇
- WindowManger与window进阶篇_1(ViewRootImpl深入理解,View测量)
- Android-WindowManger的应用
- window.open和window.close
- window.setInterval和window.setTimeout
- window.opener和window.parent
- window.attachEvent和window.addEventListener
- window.top和window.parent
- window.onload和window.load
- window.returnValue和window.showModalDialog
- window.innerWidth和window.innerHeight
- window.setInterval和window.setTimeout
- window.showModelessDialog和window.open
- 自定义JsonUtils实现对象和json字符串的相互转换
- ROS学习笔记4-使用节点,消息,主题和服务
- HTML5特点
- 2.4 物理引擎(下)
- 我的第四篇博客
- Window和WindowManger
- 求余数
- HDU 4587 TWO NODES(无向图割点)
- FFF at Valentine HDU
- ASP基础
- Python爬取网页图片
- first_try
- 表与组件(淘宝注册页面)
- mysql异常报错处理