0

0

理解WindowManager

爱谁谁

爱谁谁

发布时间:2025-09-25 08:27:18

|

319人浏览过

|

来源于php中文网

原创

WindowManager的关联类

理解windowmanager理解windowmanager

  1. Window是一个抽象类,其具体实现类为PhoneWindow,负责管理View。WindowManager是一个接口类,继承自ViewManager接口,用于管理Window,其实现类为WindowManagerImpl。

  2. 可以通过WindowManager对Window(View)进行添加、更新和删除操作。WindowManager会将具体工作委托给WMS处理。WindowManager与WMS通过Binder进行跨进程通信,WMS作为系统服务,许多API不会暴露给WindowManager。

  3. Window是以View的形式存在的。

  4. PhoneWindow是在Activity启动过程中的attach方法中创建的。

  5. WindowManagerImpl虽然是WindowManager的实现类,但并未实现功能,而是将功能委托给了WindowManagerGlobal,这里使用了桥接模式。

  6. PhoneWindow继承自Window,通过setWindowManager方法与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

    理解WindowManager

    AssemblyAI
    AssemblyAI

    转录和理解语音的AI模型

    下载

    设置Window的Flag的3种方法:

    Window mWindow = getWindow();
    mWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
    Window mWindow = getWindow();
    mWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
    WindowManager.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. 软键盘相关模式

    理解WindowManager

Window的操作

理解WindowManager

  1. 系统窗口StatusBar的添加过程

    理解WindowManager

    1)ViewRootImpl的主要职责:

    • 作为View树的根并管理View树
    • 触发View的测量、布局和绘制
    • 作为输入事件的中转站
    • 管理Surface
    • 负责与WMS进行进程间通信

    2)mWindowSession是IWindowSession类型的Binder对象,用于进行进程间通信。IWindowSession是Client端的代理,其Server端的实现为Session。之前的代码逻辑运行在本地进程,而Session的addToDisplay方法则运行在WMS所在的SystemServer进程中。

    理解WindowManager

    3)在WMS中,会为添加的窗口分配Surface,并确定窗口显示次序。负责显示界面的是画布Surface,而不是窗口本身。WMS会将它所管理的Surface交由SurfaceFlinger处理,SurfaceFlinger会将这些Surface混合并绘制到屏幕上。

    4)Window的更新需要调用ViewManager的updateViewLayout方法,updateViewLayout方法在WindowManagerImpl中实现,然后会调用WindowManagerGlobal的updateViewLayout方法。

--摘自《Android进阶解密》

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

302

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

704

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

988

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

49

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

162

2025.12.29

android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

249

2023.08.14

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

1715

2023.08.22

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.2万人学习

Excel 教程
Excel 教程

共162课时 | 10万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号