DisplayMetrics的xdpi是在系统启动时就已经初始化的代码流程
时间: 2024-03-28 18:42:42 浏览: 92
在Android系统启动时,会加载系统服务,其中包括WindowManagerService。WindowManagerService会在启动时创建DisplayManagerService对象,该对象会在系统启动时初始化DisplayMetrics。具体的代码流程如下:
1. WindowManagerService的构造函数中创建了DisplayManagerService对象:
```
mDisplayManager = new DisplayManagerService(context, wmHandler);
```
2. DisplayManagerService的构造函数中先初始化了DisplayAdapter集合,然后通过DisplayManagerGlobal.getInstance()方法获取DisplayManagerGlobal对象:
```
mDisplayAdapters = new ArrayList<DisplayAdapter>();
mDisplayAdapters.add(new LocalDisplayAdapter(this));
mGlobal = DisplayManagerGlobal.getInstance();
```
3. DisplayManagerGlobal的构造函数中创建了DisplayManager对象,并调用DisplayManager对象的init()方法初始化DisplayMetrics:
```
mDm = new DisplayManagerService(context.getApplicationContext(), wmHandler);
mDm.init();
```
4. DisplayManagerService的init()方法中先初始化了DisplayPowerController对象,然后遍历DisplayAdapter集合调用其init()方法,最后计算出DisplayMetrics:
```
mPowerController = new DisplayPowerController(context, this, mHandler, mBlanker, mDisplayReadyListener);
for (DisplayAdapter adapter : mDisplayAdapters) {
adapter.registerLocked();
adapter.initializeLocked();
}
mDisplayInfos = mTempDisplayInfos.toArray(new DisplayDeviceInfo[mTempDisplayInfos.size()]);
mDisplayManagerInternal = new LocalDisplayManagerInternal();
calculateInitialDisplayMetricsLocked();
```
可以看到,DisplayMetrics的初始化是在最后通过calculateInitialDisplayMetricsLocked()方法计算得出的。
阅读全文