一、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 {}
}