当前位置: 首页 > news >正文

灵芝产品网站建设方案2345浏览器下载

灵芝产品网站建设方案,2345浏览器下载,网络营销活动策划方案,wordpress优化搜索引擎WMS(WindowManagerService)是 Android 系统的核心服务,负责管理应用和系统的窗口,包括窗口的创建、销毁、布局、层级管理、输入事件分发以及动画显示等。它通过协调 InputManager 和 SurfaceFlinger 实现触摸事件处理和窗口渲染&a…

WMS(WindowManagerService)是 Android 系统的核心服务,负责管理应用和系统的窗口,包括窗口的创建、销毁、布局、层级管理、输入事件分发以及动画显示等。它通过协调 InputManager 和 SurfaceFlinger 实现触摸事件处理和窗口渲染,是连接应用界面和底层显示硬件的关键桥梁。

在这里插入图片描述

目录

  1. WindowManagerService 简介
  2. WMS 的架构设计
  3. WMS 的启动过程
  4. 窗口的管理和层级关系
  5. 窗口的创建流程
  6. 输入事件的分发
  7. 动画和屏幕刷新
  8. 关键源码解析
  9. 总结

1. WindowManagerService 简介

WindowManagerService (简称 WMS) 是 Android Framework 中负责管理窗口的核心服务。其主要功能包括:

  • 窗口的创建与销毁: 管理应用程序的窗口生命周期。
  • 窗口的层级管理: 根据 Z-order 和类型对窗口进行排列。
  • 输入事件的分发: 协同 InputManagerService 分发触摸和键盘事件。
  • 动画与过渡: 处理窗口的进入、退出动画。
  • 屏幕显示与布局: 控制屏幕分辨率、方向、屏幕分割等。
  • 多窗口支持: 在新版 Android 中支持多窗口模式。
    WMS 的实现位于 frameworks/base/services/core/java/com/android/server/wm 目录下,是系统中最复杂的服务之一。

在这里插入图片描述

2. WMS 的架构设计

WMS 的架构分为以下几个核心模块:

2.1 核心类

  • WindowManagerServiceWMS 的主类,负责窗口的创建、删除、层级管理和其他服务交互。
  • WindowState表示一个窗口的状态,每个窗口都对应一个 WindowState 对象。
  • WindowToken 和 AppWindowToken用于管理窗口的生命周期,一个 WindowToken 通常表示一个窗口集合(如应用的主窗口和其子窗口)。
  • DisplayContent管理物理屏幕上所有的窗口和布局信息。
  • Session每个应用都有一个对应的 Session,用于进程间通信。

2.2 辅助模块

  • InputManagerService协助处理输入事件。
  • SurfaceFlinger与底层硬件交互,负责最终窗口的显示。
  • ActivityManagerService (AMS) 管理窗口与应用的生命周期。

在这里插入图片描述

3. WMS 的启动过程

WMS 的启动由 SystemServer 触发,其流程如下:

  1. 启动 SystemServerSystemServer 初始化系统服务,包括 WMS。
  2. 调用 startOtherServicesSystemServer.javastartOtherServices() 方法中启动 WMS:
wm = WindowManagerService.main(context, inputManager, !mFirstBoot, mOnlyCore, new UiThread());
  1. 创建 WindowManagerService 实例WindowManagerService.main() 方法中初始化:
public static WindowManagerService main(Context context, InputManagerService inputManager, boolean showBootMsgs, boolean onlyCore, Handler uiHandler) {WindowManagerService service = new WindowManagerService(context, inputManager, showBootMsgs, onlyCore, uiHandler);service.onInitReady();return service;
}
  1. 注册到 ServiceManager将 WMS 注册为系统服务,供其他组件调用。

在这里插入图片描述

4. 窗口的管理和层级关系

WMS 管理窗口的层级,遵循以下原则:

  1. 按照窗口类型分层
  • 应用窗口 (Application Window):如 Activity 的主窗口。
  • 系统窗口 (System Window):如状态栏、导航栏。
  • 子窗口 (Sub Window):附属于主窗口,如对话框。
  1. Z-order 排序窗口的绘制顺序由 Z-order 决定。
  2. 层级结构窗口层级通过 DisplayContentWindowToken 实现树形管理。
    在这里插入图片描述

5. 窗口的创建流程

应用程序请求窗口创建时的流程如下:

  1. 应用调用 WindowManager应用通过 WindowManager.addView() 方法请求添加窗口。
WindowManager wm = getWindowManager();
wm.addView(view, layoutParams);
  1. 通过 Binder 传递到 WMS请求通过 Session 传递到 WMS 的 addWindow() 方法。
  2. 创建 WindowState 对象addWindow() 中为新窗口创建 WindowState 实例。
  3. 绑定 SurfaceWMS 调用 SurfaceFlinger 分配绘制区域,关联 SurfaceControl
  4. 完成添加窗口加入 DisplayContent 的管理树,完成绘制和显示。

6. 输入事件的分发

WMS 协同 InputManagerService 完成输入事件的分发。流程如下:

  1. 输入事件捕获输入事件由 InputManager 捕获后传递给 WMS。
  2. 窗口的焦点判断WMS 根据焦点窗口确定事件目标。
  3. 分发事件通过 IPC 将事件发送到目标窗口所在的应用。
    输入事件分发的核心方法是 deliverPointerEvent()

7. 动画和屏幕刷新

WMS 的动画处理包括窗口的打开、关闭、过渡动画,主要由 WindowAnimator 处理。

屏幕刷新由 Choreographer 协调,确保动画流畅显示。

8. 关键源码解析

8.1 addWindow 源码解析

WindowManagerService.addWindow 是窗口创建的核心方法:

public int addWindow(Session session, IWindow client, int seq, WindowManager.LayoutParams attrs, int viewVisibility, int displayId, Rect outContentInsets, Rect outStableInsets, DisplayCutout.ParcelableWrapper outDisplayCutout, InputChannel outInputChannel) {synchronized(mGlobalLock) {WindowState win = new WindowState(this, session, client, attrs, seq, viewVisibility);// 校验窗口合法性// 创建 Surface// 加入到 WindowList...}return WindowManagerGlobal.ADD_OKAY;
}

8.2 输入事件分发

在 WMS 中,输入事件分发的核心方法是 processPointerEvent()

public void processPointerEvent(MotionEvent event) {synchronized(mGlobalLock) {WindowState focusedWindow = mFocusedWindow;if (focusedWindow != null) {focusedWindow.deliverInputEvent(event);}}
}

9. 总结

WindowManagerService 是 Android 系统中最重要的服务之一。它不仅连接了应用、系统和硬件,还实现了复杂的窗口管理、动画效果、输入分发等功能。通过深入理解 WMS 的架构和源码,可以帮助开发者更好地优化应用的性能和用户体验。

http://www.yayakq.cn/news/879217/

相关文章:

  • 如今做哪些网站能致富wordpress single页面
  • thinkphp 显示第三方网站图片上海建筑网页设计
  • 浙江省建设厅干部学校网站重庆网站建设公司联系方式
  • 注册网站的步骤wordpress音乐门户主题
  • 广安市邻水建设局网站深圳常桉网站建设
  • 网站出现的的问题wordpress 代码高亮
  • 那个网站专门做二手衣服视频网站的广告能怎么做
  • 东莞做网站(信科网络)优惠券网站做淘客违规吗
  • 社交网站做强项目管理软件对比
  • 律师个人 网站做优化深圳网站建设吗
  • 网站开发实用技术知识点网站关键词做排名不分
  • 怎么制作网站设计图片wordpress标签打不开
  • 做空气开关那个网站推广比较好怎样建设网站网站
  • 怎样做自己的购物网站网站怎么增加关键词库
  • 有做美食的网站有哪些上海设计网站
  • 网站建设开发株洲营销网站建设
  • 在58做网站推广有效果吗帝国cms登录网站
  • 中国网站建设的利弊更新服务 wordpress
  • 网站代码 字体一家做运动鞋的网站好
  • 遨游网站建设网站建设项目招标公告
  • 乾县做网站网站的设计与应用论文
  • 在阿里巴巴上做网站有效果吗网站首页尺寸
  • 搭建一个视频网站全网营销推广网站建设
  • 上海做网站就用乐云seo网站上的网站地图怎么做
  • 小红书网站建设目的wordpress启用新主题后打不开
  • 高端设计seo关键词排名优化手机
  • 永久免费个人网站申请注册公司做小程序要多少钱
  • 青海找人做网站多少钱阿里云 邮件 wordpress
  • 电脑手机自适应网站的建设51外链代发网
  • 做网站及小程序需要会哪些技能wordpress 多级导航