美文网首页
第八章 Window和WindowManager

第八章 Window和WindowManager

作者: 橙子6193 | 来源:发表于2022-03-03 18:49 被阅读0次

Window表示一个窗口,Android所有的视图,不管是Activity、Dialog、Toast,都是由Window来呈现的,Window是View的直接管理者,Window是一个抽象类,它的具体实现是PhoneWindow,每个Window都对应一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系,可以说Window并不是实际存在的,它是以View的形式存在
WindowManager创建Window,和WindowManagerService交互(IPC),我们常用WindowManager的功能有三个,分别是添加、更新、删除View,通过这三个方法我们可创建一个Window并向其添加、更新、删除View
下面介绍下WindowManager的LayoutParams,它有两个属性很重要,一个是flags,代表Window的属性,另一个是type,代表Window的类型
常用的flags:
FLAG_NOT_FOCUSABLE:表示Window不获取焦点,也不会接收各种输入事件,此标记会同时启用FLAG_NOT_TOUCH_MODAL,最终事件会直接传递到下面有焦点的Window
FLAG_NOT_TOUCH_MODAL:此标记模式下,Window内的点击事件由Window自己处理,Window外部的点击事件由下面的Window进行处理
FLAG_SHOW_WHEN_LOCKED:开启此模式可以让Window显示在锁屏界面上
type有3种类型,分别是应用窗口(1-99)、子窗口(1000-1999)、系统窗口(2000-2999),Window是分层的,层级越大的Window,就显示的越上面,常见的Dialog就是一个子窗口,而Toast和状态栏是系统窗口,系统窗口是需要声明权限才能创建的

Window的添加过程

Window的addView实际实现是在WindowManagerImpl里,WindowManagerImpl里addView又会调用WindowManagerGlobal的addView方法,该方法内部会创建一个ViewRootImpl并将要添加的View、ViewRootImpl加进WindowManagerGlobal内部的几个列表里(通过findViewLocked方法获取索引),然后调ViewRootImpl的setView更新界面并完成Window的添加过程(setView内部会调requestLayout->scheduleTravels注册下一帧刷新监听,requestLayout后会通过session调用一次IPC向WMS添加Window),个人理解,屏幕上View的刷新都是通过ViewRootImpl来完成的,WMS只是负责Window的添加、删除,以便知道该向哪些Window分发事件
Activity实现了Window.Callback接口,而且Activity内部创建的PhoneWindow.setCallback(this),因此当Window接收到外界状态改变时,就会回调Activity的相关方法

相关文章

  • Android进阶(8)| Window和WindowManag

    一.Window和WindowManager 1.通过WindowManager添加Window的过程 代码如下:...

  • Window和WindowManager

    1.Window是抽象的概念,每个Window对应一个View和ViewRootImpl,实际上是以View的形式...

  • Window和WindowManager

    参考资料 凯子哥带你学Framework· Activity界面显示全解析-上凯子哥带你学Framework Ac...

  • Window和WindowManager

    参考《Android开发艺术探索》第八章

  • Window 和 WindowManager

    这篇文章是本着抛砖引玉的目的,如果有不严谨,甚至错误地方,劳驾各位指正。 有一群很(hua)好(qian)学(ma...

  • Window和WindowManager

    在WinodwManagerGlobal中,ViewRootImpl(在老版本中为ViewRoot类)起到了绘制V...

  • Window 和 WindowManager

    概述 window window 是一个抽象类,具体实现是PhoneWindow window 也是一个抽象的概念...

  • Window和WindowManager

    在屏幕上创建一个浮动试图 首先实现一个功能,在屏幕上创建一个浮窗,创建一个Window,这一步只需要使用Windo...

  • window和windowManager

    window是一个抽象类,它的具体实现时PhoneWindow,创建window是由windowManager来完...

  • Window和WindowManager

    Window和WindowManager 标签(空格分隔): android 一些简单的定义: WindowMan...

网友评论

      本文标题:第八章 Window和WindowManager

      本文链接:https://www.haomeiwen.com/subject/rltlrrtx.html