理解WidowManager
--摘自《Android进阶解密》
*WindowManger的关联类*
1.Window是一个抽象类,具体的实现类为PhoneWindow,它对View进行管理。WindowManager是一个接口类,继承自接口ViewManager,ViewManager是用来管理Window的,它的实现类为WindowManagerImpl。
2.想要对Windo(View)进行添加、更新和删除操作就可以使用WindowManager,WindowManager会将具体的工作交由WMS来处理,WindowManager和WMS通过Binder来进行跨进程通信,WMS作为系统服务有很多API是不会暴露给WindowManager的
3.Window是以View的形式存在的
4.PhoneWindow是在Activity启动过程中的attach方法中创建的
5.WindowManagerImpl虽然是WindowManger的实现类,但是没有实现什么功能,而是将功能实现委托给了WindowManagerGlobal,这里用到的是桥接模式
6.PhoneWindow继承自Window,Window通过serWindowManager方法与WindowManager发生关联。WindowManager继承自接口ViewManager,WindowManagerImpl是WindowManager接口的实现类,但是具体的功能都会委托给WindowManagerGlobal来实现
*Window的属性*
1.Type-Window的类型
1)应用程序窗口-Application Window Type值范围 1~99
2)子窗口-Sub Window Type值范围 1000~1999
3)系统窗口-System Window Type值范围 2000~2999
Type值越大则Z轴排序越靠前,就越靠近用户
2.Window标志-Flag
设置Window的Flag的3种方法
Window mWindow = getWindow(); mWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);Window mWindow = getWindow(); mWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEWindowManager.LayoutParams mWindowLayoutParams = new WindowManager.LayoutParams(); mWindowLayoutParams.flags=WindowManager.LayoutParams.FLAG_FULLSCREEN; WindowManager mWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE); TextView mTextView = new TextView(this); mWindowManager.addView(mTextView,mWindowLayoutParams);
3. 软键盘相关模式
*Window的操作*
1.系统窗口StatusBar的添加过程
1)ViewRootImpl的主要职责
* View树的根并管理View树
* 触发View的测量、布局和绘制
* 输入事件的中转站
* 管理Surface
* 负责与WMS进行进程间通信
2)mWindowSession是IWindowSession类型的,它是一个Binder对象,用于进行进程间通信,IWindowSession是Client端的代理,它的Server端的实现为Session,此前的代码逻辑都是运行在本地进程的,而Session的addToDisplay方法则运行在WMS所在的进程(SystemServer进程)中
3)WMS中会为添加的窗口分配Surface,并确定窗口显示次序,可见负责显示界面的是画布Surface,而不是窗口本身。WMS会将它所管理的Surface交由SurfaceFlinger处理,SurfaceFlinger会将这些Surface混合并绘制到屏幕上
4)Window的更新需要调用ViewManager的updateViewLayout方法,updateViewLayout方法在WindowManagerImpl中实现,然后会调用WindowManagerGlobal的updateViewLayout方法
欢迎关注我的微信公众号:安卓圈
转载于:https://www.cnblogs.com/anni-qianqian/p/10186291.html
理解WidowManager相关推荐
- 通用解题法——回溯算法(理解+练习)
积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...
- stream流对象的理解及使用
我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...
- Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)
1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...
- java局部变量全局变量,实例变量的理解
java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...
- 智能文档理解:通用文档预训练模型
预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...
- 熵,交叉熵,散度理解较为清晰
20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...
- mapreduce理解_大数据
map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...
- 文件句柄和文件描述符的区别和理解指针
句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...
- 通俗理解条件熵-数学
就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...
- 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积
20210609 例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7. https://blo ...
最新文章
- jquery 和js 还有 jq 挂事件
- 爱可可推荐!关于竞赛思路,方法和代码实践,数据竞赛Baseline开源分享!
- ajax post传送数组以及java后台接收数组
- t-sne 流形_流形学习[t-SNE,LLE,Isomap等]变得轻松
- 龙芯3A5000初样顺利交付流片
- 前端获取后端传来的session_用java编写一个web程序,登陆后,把用户信息放在session中,前端怎样获取session的值?...
- jQuery——入门基础(获取元素、样式、属性,选择集、过滤器、样式类)
- python寻路_【Python】 Numpy极简寻路
- JZOJ 6290. 倾斜的线
- 初探C语言指针之何为指针变量
- java lambda教程_Lambda系列教材 (一)- Java Lambda 表达式教程
- php核心技术与最佳实践 --- 错误与异常
- html 导航菜单切换效果,纯CSS实现Tab导航栏切换
- 第15章-使用远程服务
- 一次非常成功的项目经验分享和糟糕项目的对比
- WPE封包外挂教程(上)
- Android5g手机,这几款5G手机,入手三年不卡,不妨试一下
- 西门子s7-200的PLC编程软件,帮助程序无法打开问题解决方法
- 偶然还是必然——读小蚂蚁的罗马人故事II
- 微软lync 持续服务器,Lync Server 2013 持久聊天服务器通道关闭