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

网站缩放代码百度推广官方网站登录入口

网站缩放代码,百度推广官方网站登录入口,万源网站建设,软件开发和网站开发有何不同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.hkea.cn/news/758451/

相关文章:

  • 大理网站开发长春seo结算
  • 西双版纳疫情最新情况seo营销的概念
  • 网站推广seo蜘蛛屯优化排名模板建网站价格
  • 怎样建设公司网站小程序b2b网站大全免费
  • 百度抓取不到网站百度识图搜索图片来源
  • 企业网站栏目规划的重要性网络营销的概述
  • 公司网站建设找谁做免费发布推广信息网站
  • 虚拟币网站开发seo百度关键字优化
  • 网站建设都 包括哪些淄博网站制作
  • 自己做装修网站南宁百度推广seo
  • 品牌建设浅谈seo网络营销外包
  • 昆山网站建设兼职千锋教育的官网
  • cm域名做网站盘古百晋广告营销是干嘛
  • 网站栏目策划企业网络营销方案
  • 网站自动采集指标sem广告投放是做什么的
  • 想做一个个人网站怎么做培训学校
  • 网站开发ipv6升级如何创建自己的小程序
  • 做网站需要备案吗外贸网站推广与优化
  • 独立网站建设流程b站视频推广网站动漫
  • 泰安诚信的网站建设b站推广入口2023年
  • 高校网站建设资料库东莞seo推广公司
  • 电子印章手机在线制作软件四川seo整站优化费用
  • 个人风采网站制作外贸网站平台哪个好
  • 沈阳企业建站谷歌推广和seo
  • .la域名做的网站如何快速推广app
  • 广州优化网站建设怎么用手机制作网站
  • 做微网站的第三方学网络营销
  • 湖南做网站的公司有哪些搜索引擎是什么
  • flash网站管理系统seo优化排名易下拉用法
  • 永年网站建设友链互换平台推荐