Android Display

一、Android Display介绍

DisplayManagerService用来管理显示的生命周期,它决定如何根据当前连接的物理显示设备控制其逻辑显示,并且在状态更改时,向系统和应用程序发送通知,等等。

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

目前有以下两种方式的适配器供使用

一、为本地显示设备提供适配器。

二、为开发者提供的模拟显示适配器。

DisplayAdapter 与 DisplayManagerService 是弱耦合关系。DisplayAdapter通过注册在 DisplayManagerService类中的 DisplayAdapter.Listener 实现异步通信。这样做有两个原因

一、巧妙地封装了这两个类的职责,

DisplayAdapter :处理各个显示设备

DisplayManagerService:处理全局显示状态。

二、消除异步显示设备发现导致死锁的可能性

还有一个关键类DisplayPowerController,它主要处理PMS的请求来执行显示的亮屏流程和灭屏流程,它会调用SurfaceControl 、LightsService、PhoneWindowManager进行相关处理,如设置屏幕背光,通知PhoneWindowManager屏幕开启等操作,通知SurfaceControl显示电源模式。

二、Android Display相关类

Display

Provides information about the size and density of a logical display.

提供有关逻辑显示的大小和密度的信息。

Display代码位于:

frameworks/base/core/java/android/view/Display.java

Display的定义:

public final class Display {}

DisplayInfo

Describes the characteristics of a particular logical display.

描述特定逻辑显示的特征。

DisplayInfo代码位于:

frameworks/base/core/java/android/view/DisplayInfo.java

DisplayInfo的定义:

public final class DisplayInfo implements Parcelable {}

DisplayManager

Manages the properties of attached displays.

DisplayManager代码位于:

frameworks/base/core/java/android/hardware/display/DisplayManager.java

DisplayManager的定义:

public final class DisplayManager {}

DisplayManager方法:

VirtualDisplay createVirtualDisplay(String name, int width, int height, int densityDpi, Surface surface, int flags):创建一个虚拟显示。
VirtualDisplay createVirtualDisplay(String name, int width, int height, int densityDpi, Surface surface, int flags, VirtualDisplay.Callback callback, Handler handler):创建一个虚拟显示。
Display getDisplay(int displayId):获取有关逻辑显示的信息。
Display[] getDisplays():获取当前所有有效的逻辑显示。
Display[] getDisplays(String category):获取指定类别的所有当前有效的逻辑显示。
void registerDisplayListener(DisplayManager.DisplayListener listener, Handler handler):注册显示监听器以接收有关何时添加,删除或更改显示的通知。
void unregisterDisplayListener(DisplayManager.DisplayListener listener):取消注册显示监听器。

DisplayManagerInternal

Display manager local system service interface,Only for use within the system server.

显示管理器本地系统服务接口,仅供在系统服务器内使用。

DisplayManagerInternal代码位于:

frameworks/base/core/java/android/hardware/display/DisplayManagerInternal.java

DisplayManagerInternal的定义:

public abstract class DisplayManagerInternal {
    public static final class DisplayPowerRequest {}
}

DisplayManagerInternal方法:

public abstract boolean requestPowerState(int groupId, DisplayPowerRequest request, boolean waitForNegativeProximity):由电源管理器调用以请求新的电源状态。
public abstract DisplayInfo getDisplayInfo(int displayId):返回有关指定逻辑显示的信息。

DisplayManagerGlobal

Manager communication with the display manager service on behalf of an application process.

管理器代表应用程序进程与显示管理器服务进行通信。

DisplayManagerGlobal代码位于:

frameworks/base/core/java/android/hardware/display/DisplayManagerGlobal.java

DisplayManagerGlobal的定义:

public final class DisplayManagerGlobal {}

DisplayManagerService

管理显示的生命周期,它决定如何根据当前连接的物理显示设备控制其逻辑显示,并且在状态更改时,向系统和应用程序发送通知,等等。

DisplayManagerService代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java

DisplayManagerService的定义:

public final class DisplayManagerService extends SystemService {}

DisplayGroup

Represents a collection of {@link LogicalDisplay}s which act in unison for certain behaviors and operations; particularly display-state.

表示 {@link LogicalDisplay} 的集合,这些集合对某些行为和操作一致执行;特别是显示状态。

DisplayGroup代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayGroup.java

DisplayGroup的定义:

public class DisplayGroup {}

DisplayAdapter

A display adapter makes zero or more display devices available to the system and provides facilities for discovering when displays are connected or disconnected.

显示适配器使系统可以使用零个或多个显示设备,并提供用于发现显示器何时连接或断开连接的工具。

DisplayAdapter代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayAdapter.java

DisplayAdapter的定义:

abstract class DisplayAdapter {
    public interface Listener {
        void onDisplayDeviceEvent(DisplayDevice device, int event);
        void onTraversalRequested();
    }
}

LocalDisplayAdapter

A display adapter for the local displays managed by SurfaceFlinger.

由 SurfaceFlinger 管理的本地显示器的显示适配器。

LocalDisplayAdapter代码位于:

frameworks/base/services/core/java/com/android/server/display/LocalDisplayAdapter.java

LocalDisplayAdapter的定义:

final class LocalDisplayAdapter extends DisplayAdapter {
    private final class LocalDisplayDevice extends DisplayDevice {}
    private static final class DisplayModeRecord {}
    public static class Injector {}
    public interface DisplayEventListener {}
    public static final class ProxyDisplayEventReceiver extends DisplayEventReceiver {}
    private final class LocalDisplayEventListener implements DisplayEventListener {}
    static class SurfaceControlProxy {}
    static class BacklightAdapter {}
}

LogicalDisplayMapper

Responsible for creating {@link LogicalDisplay}s and associating them to the {@link DisplayDevice} objects supplied through {@link DisplayAdapter.Listener}.

负责创建 {@link LogicalDisplay} 并将它们关联到通过 {@link DisplayAdapter.Listener} 提供的 {@link DisplayDevice} 对象。

LogicalDisplayMapper代码位于:

frameworks/base/services/core/java/com/android/server/display/LogicalDisplayMapper.java

LogicalDisplayMapper的定义:

class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {}

LogicalDisplay

Describes how a logical display is configured.

描述如何配置逻辑显示。

LogicalDisplay代码位于:

frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java

LogicalDisplay的定义:

final class LogicalDisplay {}

DisplayDevice

Represents a physical display device such as the built-in display an external monitor, or a WiFi display.

表示物理显示设备,例如内置显示器、外部显示器或 WiFi 显示器。

DisplayDevice代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayDevice.java

DisplayDevice的定义:

abstract class DisplayDevice {}

DisplayDeviceInfo

Describes the characteristics of a physical display device.

描述物理显示设备的特征。

DisplayDeviceInfo代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayDeviceInfo.java

DisplayDeviceInfo的定义:

final class DisplayDeviceInfo {}

DisplayDeviceRepository

Container for all the display devices present in the system. If an object wants to get events about all the DisplayDevices without needing to listen to all of the DisplayAdapters, they can listen and interact with the instance of this class.

系统中存在的所有显示设备的容器。 如果对象想要获取有关所有 DisplayDevices 的事件,而无需侦听所有 DisplayAdapter,则它们可以侦听此类的实例并与之交互。

DisplayDeviceRepository代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayDeviceRepository.java

DisplayDeviceRepository的定义:

class DisplayDeviceRepository implements DisplayAdapter.Listener {}

DisplayPowerController

Controls the power state of the display.

控制显示器的电源状态。

DisplayPowerController代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java

DisplayPowerController的定义:

final class DisplayPowerController implements AutomaticBrightnessController.Callbacks,
        DisplayWhiteBalanceController.Callbacks {
    class BrightnessEvent {}
    private final class DisplayControllerHandler extends Handler {}
    private final class BrightnessReason {}
    static class CachedBrightnessInfo {}
}

DisplayPowerState

Controls the display power state.

控制显示电源状态

DisplayPowerState代码位于:

frameworks/base/services/core/java/com/android/server/display/DisplayPowerState.java

DisplayPowerState的定义:

final class DisplayPowerState {}

BrightnessConfiguration

亮度配置相关

BrightnessConfiguration代码位于:

frameworks/base/services/core/java/com/android/server/display/BrightnessConfiguration.java

BrightnessConfiguration的定义:

public final class BrightnessConfiguration implements Parcelable {}

BrightnessTracker

Class that tracks recent brightness settings changes and stores associated information such as light sensor readings。

跟踪最近的亮度设置更改并存储相关信息(如光传感器读数)的类。

BrightnessTracker代码位于:

frameworks/base/services/core/java/com/android/server/display/BrightnessTracker.java

BrightnessTracker的定义:

public class BrightnessTracker {}

PersistentDataStore

Manages persistent state recorded by the display manager service as an XML file.

管理显示管理器服务以 XML 文件形式记录的持久状态。

PersistentDataStore代码位于:

frameworks/base/services/core/java/com/android/server/display/PersistentDataStore.java

PersistentDataStore的定义:

final class PersistentDataStore {
    private static final class DisplayState {}
    private static final class BrightnessConfigurations {}
}

三、Android Display相关流程分析

DisplayManager getDisplay流程分析

Android13 DisplayManager getDisplay流程分析-CSDN博客

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值