Android DisplayDevice是在什么时候创建的
在Android系统中,DisplayDevice是用来表示设备屏幕的类。它包含屏幕的一些基本信息,比如像素密度、分辨率等,同时也负责屏幕的绘制和渲染。那么,Android DisplayDevice是在什么时候创建的呢?下面我们将从代码层面和流程层面来探讨这个问题。
从代码层面来看
在Android系统中,DisplayDevice是在SurfaceFlinger初始化的过程中创建的。SurfaceFlinger是Android系统中的一个系统组件,负责管理屏幕显示和渲染。在SurfaceFlinger的初始化过程中,会通过调用createDisplayDeviceLocked
方法来创建DisplayDevice对象。
// SurfaceFlinger.cpp
status_t SurfaceFlinger::init() {
// 初始化其他相关参数
// ...
// 创建DisplayDevice
createDisplayDeviceLocked();
// 初始化其他相关参数
// ...
}
void SurfaceFlinger::createDisplayDeviceLocked() {
sp<IBinder> displayToken(SurfaceComposerClient::getBuiltInDisplay(
ISurfaceComposer::eDisplayIdMain));
sp<IGraphicBufferProducer> producer = new FramebufferSurface(mFlinger,
displayToken, 0, 0, nullptr).getBufferQueue()->getBufferProducer();
mCurrentState.displays.addItemsAt(0, displayToken);
DisplayDeviceCreationArgs creationArgs;
// 设置一些参数
// ...
mDisplays.add(new DisplayDevice(this, creationArgs));
}
在上面的代码中,我们可以看到在SurfaceFlinger的init方法中会调用createDisplayDeviceLocked
方法来创建DisplayDevice对象。在createDisplayDeviceLocked
方法中会创建一个FrameBufferSurface,并通过它来创建DisplayDevice对象。
从流程层面来看
在Android系统启动的过程中,会涉及到各种系统服务的初始化工作。其中,SurfaceFlinger是在Zygote进程启动时就会被启动并初始化。而DisplayDevice的创建也是在SurfaceFlinger初始化的过程中完成的。
下面是一个关于Android DisplayDevice创建过程的序列图:
sequenceDiagram
participant Zygote
participant SurfaceFlinger
participant DisplayDevice
Zygote->>SurfaceFlinger: 启动
SurfaceFlinger->>SurfaceFlinger: 初始化
SurfaceFlinger->>SurfaceFlinger: 创建DisplayDevice对象
SurfaceFlinger->>SurfaceFlinger: 初始化DisplayDevice参数
SurfaceFlinger->>SurfaceFlinger: 显示屏幕
SurfaceFlinger->>DisplayDevice: 显示内容
通过上面的序列图,可以看出DisplayDevice是在SurfaceFlinger的初始化过程中被创建的,它是Android系统中负责显示屏幕内容的关键类之一。
综上所述,Android DisplayDevice是在SurfaceFlinger初始化的过程中创建的,它包含了屏幕的一些基本信息,并负责显示和渲染屏幕内容。在Android系统中,SurfaceFlinger是一个非常重要的系统组件,掌握它的初始化流程对于理解DisplayDevice的创建时机非常有帮助。希望本文能够帮助到对Android系统感兴趣的读者们。
参考资料
- Android开发者官网:
声明:本文仅供参考学习,如有侵权,请及时联系删除。