DisplayManagerService详解

基于Android R版本分析

DisplayManagerService

DisplayManagerService是负责Display管理的系统服务之一,还有一些其他功能,包括屏幕亮度调节也涉及到DMS,其继承了SystemServer,因此具有SystemService子类的共性,具有生命周期、由SystemServer启动、注册到系统服务中,通过Binder和其他组件进行交互等;

Package Name Directory Description Example
android.hardware.display /frameworks/base/core/java/android/hardware/display 外部模块可访问没有@hide注释的类 DisplayManager、DisplayManagerGlobal、......
android.view /frameworks/base/core/java/android/view 逻辑屏配置相关 DisplayInfo、DisplayViewport、......
com.android.server.display /frameworks/base/services/core/java/com/android/server/display DMS核心,外部模块无权限直接访问 DMS、DisplayDevice、......

Display 数据结构

Display

  • LogicalDisplay:代表逻辑显示屏,每一个physical display都会对应一个logical display;

  • DisplayDeviceInfo:DisplayDevice信息封装类,在创建DisplayDevice时会进行创建,与之对应的是Logical display的DisplayInfo;

  • DisplayInfo:LogicalDisplay信息的封装类,基本数据由DisplayDeviceInfo获取,app可以通过WMS来修改自己的参数;

  • DisplayAdapterListener:用于通知DisplayDevice发生变化的接口,DMS中对其进行了实现,会接收以下三个事件并根据事件作出全局反应:

    • DisplayAdapter.DISPLAY_DEVICE_EVENT_ADDED:添加了新的DisplayDevice;
    • DisplayAdapter.DISPLAY_DEVICE_EVENT_CHANGED:DisplayDevice状态发生变化;
    • DisplayAdapter.DISPLAY_DEVICE_EVENT_REMOVED:移除DisplayDevice。

DisplayAdapter:DisplayManagerService所依赖的集合组件,其为系统显示,收集并发现物理显示设备提供了适配器的作用;

  • LocalDisplayAdapter: 继承于DisplayAdapter, 用于LocalDisplayDevice和DMS的连接;
  • WifiDisplayAdapter: 继承于DisplayAdapter,用于WifiDisplayDevice的和DMS的连接;
  • OverlayDisplayAdapter:继承于DisplayAdapter,用于OverlayDisplayDevice和DMS的连接;
  • VirtualDisplayAdapter:继承于DisplayAdapter,用于VirtualDisplayDevice和DMS的连接;

DisplayDevice:代表physical display;

  • LocalDisplayDevice:DisplayDevice的子类,代表内置物理屏幕,DMS启动后会通过SurfaceControl去读取内置屏幕数据,并创建该类对象;
  • WifiDisplayDevice:DisplayDevice的子类,代表通过Wifi连接显示的物理屏幕;
  • OverlayDisplayDevice:DisplayDevice的子类,开发者选项 -> 模拟辅助显示开启后,创建的就是该类对象;
  • VirtualDisplayDevice:DisplayDevice的子类,表示虚拟显示屏幕,用于屏幕录制等;

DMS 启动

创建 DisplayAdapter & LocalDisplayDevice

通知DMS完成 Physical Display

DisplayAdapter中是通过回调的方式来通知DMS的,回调接口类是DisplayAdapter.Listener,DMS中对其进行了实现,并在实例化LocalDisplayAdapter时作为参数传入;

DisplayContent 创建

每一个Display实例对应一个DisplayContent实例;

相关推荐
小天源2 分钟前
智叟云集定时采集与消息推送架构——实现可恢复的订阅通知流程
架构·sass·权限管理·多租户·服务商 api·ai采集
Shaoshing16 分钟前
存储引擎与架构
java·开发语言·架构
whyutianict_vv20 分钟前
AI 大模型技术架构解析:从推理链路到训练流程
人工智能·ai·架构·开发
企业解惑小助手25 分钟前
企业 AI 工具泄密怎么防护整体方案设计|需求拆解与落地架构
人工智能·架构·域智盾
智慧光迅AINOPOL30 分钟前
10~50 人规模办公网络组网技术分析:架构对比与选型参考
网络·架构·智能路由器
李福春32 分钟前
技术思考问题19:低代码省代码,能省架构吗?
低代码·架构·rxjava·深圳同盟·腾讯云架构师技术同盟·能力圈·机会成本
其实防守也摸鱼43 分钟前
存储管理:页面置换算法学习任务(测验题要求给出置换页面顺序,缺页次数,缺页率)
android·前端·数据库·学习·oracle·自动化
涵美女程序猿1 小时前
ChatCut online 剪微服务熔断测试录屏:仪表盘告警、降级日志与恢复时刻怎样对应
程序人生·微服务·云原生·架构·电脑
@PHARAOH2 小时前
WHAT - Vite 8(Rolldown 底层构建引擎升级)
前端·架构
hhb_6182 小时前
智联AI办公微服务技术全解析
人工智能·微服务·架构