--摘自《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相关推荐

  1. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  2. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  3. Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)

    1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...

  4. java局部变量全局变量,实例变量的理解

    java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...

  5. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  6. 熵,交叉熵,散度理解较为清晰

    20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...

  7. mapreduce理解_大数据

    map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...

  8. 文件句柄和文件描述符的区别和理解指针

    句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...

  9. 通俗理解条件熵-数学

    就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...

  10. 通俗理解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 ...

最新文章

  1. jquery 和js 还有 jq 挂事件
  2. 爱可可推荐!关于竞赛思路,方法和代码实践,数据竞赛Baseline开源分享!
  3. ajax post传送数组以及java后台接收数组
  4. t-sne 流形_流形学习[t-SNE,LLE,Isomap等]变得轻松
  5. 龙芯3A5000初样顺利交付流片
  6. 前端获取后端传来的session_用java编写一个web程序,登陆后,把用户信息放在session中,前端怎样获取session的值?...
  7. jQuery——入门基础(获取元素、样式、属性,选择集、过滤器、样式类)
  8. python寻路_【Python】 Numpy极简寻路
  9. JZOJ 6290. 倾斜的线
  10. 初探C语言指针之何为指针变量
  11. java lambda教程_Lambda系列教材 (一)- Java Lambda 表达式教程
  12. php核心技术与最佳实践 --- 错误与异常
  13. html 导航菜单切换效果,纯CSS实现Tab导航栏切换
  14. 第15章-使用远程服务
  15. 一次非常成功的项目经验分享和糟糕项目的对比
  16. WPE封包外挂教程(上)
  17. Android5g手机,这几款5G手机,入手三年不卡,不妨试一下
  18. 西门子s7-200的PLC编程软件,帮助程序无法打开问题解决方法
  19. 偶然还是必然——读小蚂蚁的罗马人故事II
  20. 微软lync 持续服务器,Lync Server 2013 持久聊天服务器通道关闭

热门文章

  1. Solaris10文件布局
  2. endnotex7怎么导入中文文献,EndNote 7.0使用中文详细教程
  3. TCP通信过程中各步骤的状态---(简单解释)
  4. java项目高新_java高新技术
  5. 4.额外线程能力(Additional Thread Capabilities)
  6. YOLO3实现对自身数据集的训练-YOLO3代码学习资料
  7. 求解偏微分方程开源有限元软件deal.II学习--Step 13
  8. 【hiho一下 第147周】小Hi的烦恼
  9. js/jQuery中的宽高
  10. Flask和WebSocket