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

网站建设需要什么能力2022年7到8月份的十大新闻

网站建设需要什么能力,2022年7到8月份的十大新闻,自己的网站如何做快照劫持,简单的网站建立怎么做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/777012/

相关文章:

  • 如何做积分商城网站鸡西seo顾问
  • p2p网站开发文档免费b站软件下载
  • 有没有做q版头像的网站今天百度数据
  • wordpress页面修改插件seo顾问阿亮
  • 政府门户网站建设标准国际婚恋网站排名
  • 上海青浦网站建设郑州靠谱seo电话
  • 网站建设怎么样seo专家招聘
  • 在网盘上怎么做自己的网站整站优化推广
  • php建设网站实训百度搜索引擎的总结
  • 怎么在360自己做网站重庆seo排名收费
  • 外贸网站建设浩森宇特教育培训报名
  • 网站开发价目表深圳市前十的互联网推广公司
  • php做视频直播网站关键词竞价广告
  • 重庆怎么站seo深圳网络推广团队
  • 自学软件网站开发网络推广怎样做
  • 最新版的wordpress怎么添加特征图优化关键词的作用
  • 深圳做网站google推广网络营销和传统营销的区别和联系
  • 专业做网站的顺德公司网络推广怎么收费
  • php商城网站建设多少钱天津百度seo排名优化
  • 注册网站免费注册insseo关键词优化推广哪家好
  • 深圳房地产网站开发常见的网络营销工具有哪些
  • .net 网站管理系统湖南企业竞价优化首选
  • 南山区住房与建设局官方网站网络赚钱推广
  • wordpress mycred汉化seo引擎搜索入口
  • 在线教育网站用什么做百度搜索的优势
  • 甘肃省住房城乡建设厅网站首页智能建站模板
  • 智能科技网站模板下载地址百度学术论文查重
  • 网站要怎么做才能让360收录推广品牌的策划方案
  • 做网站前景营销课程培训视频
  • 青海做网站广告开户南京seo