Android Display管理服务

一.DisplayManagerService

1.概述

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

Display类型

       1.LocalDisplay
       2.OverlayDisplay
       3.WifiDisplay
       4.VirtualDisplay

 
DisplayAdapter类型

       每个Display对应一个 DisplayAdapter:
       1.LocalDisplayAdapter:本地已经存在的物理显示屏设备。
       2.OverlayDisplayAdapter:模拟辅助显示设备,以类似浮动窗口的形式显示在主屏上,可以当第二个屏幕使用,默认也是镜像主屏。
       3.WifiDisplayAdapter:WiFi Display
       4.VirtualDisplayAdapter:显示一个虚拟屏幕

2.关系图

       先将Display管理相关的类之间的关系图列出来,有个大概的了解:

3.启动过程

       和SystemService的其他子类一样,DMS由SystemServer通过反射的方式启动,看一下DMS的构造方法:

2.1.构造方法

构造方法内部逻辑比较简单,主要逻辑为:
       1.创建了mHandler和mUiHandler用来自身和其他消息队列处理;
       2.创建了DisplayDeviceRepository对象,接收设备事件变化;
       3.获取系统服务PowerManger;
onStart()

 在该方法中,发送了MSG_REGISTER_DEFAULT_DISPLAY_ADAPTERS消息注册DisplayAdapter
公共BinderSerive供其他进程进行调用,公开LocalService供本进程进行使用;
onBootPhase()

在onBootPhase内部,接收到phase为PHASE_WAIT_FOR_DEFAULT_DISPLAY时,
判断是否创建了Display.DEFAULT_DISPLAY对应的LogicalDisplay,
且是否创建了VirtualDisplayAdapter对象,如果不满足一个条件时,需要等待;

systemReady()

当systemReady时,发送MSG_REGISTER_ADDITIONAL_DISPLAY_ADAPTERS来注册其他的adapter;

二.创建DisplayDevice和LogicalDisplay

前面在onStart()中分析到,发送了MSG_REGISTER_DEFAULT_DISPLAY_ADAPTERS消息,跟随调用关系,会调用到registerDefaultDisplayAdapters()方法,一起看一下:

在该方法内部执行registerDisplayAdapterLocked(),会先创建LocalDisplayAdapter实例作为参数传入,
接下来创建了VirtualDisplayAdapter实例,然后执行registerDisplayAdapterLocked()进行注册。
先看一下registerDisplayAdapterLocked()实现:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weijaky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值