ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
下面来分析PMS第三阶段的工作。此时系统中大部分服务都已创建好,即将进入就绪阶段。就绪阶段的工作在systemReady中完成,代码如下: **PowerManagerService.java::systemReady** ~~~ void systemReady() { /* 创建一个SensorManager,用于和系统中的传感器系统交互,由于该部分涉及较多的native层 代码,因此将相关内容放到本书后续章节进行讨论 */ mSensorManager = new SensorManager(mHandlerThread.getLooper()); mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); if(mUseSoftwareAutoBrightness) { mLightSensor =mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); } if(mUseSoftwareAutoBrightness) { setPowerState(SCREEN_BRIGHT); } else {//不考虑软件自动亮度调节,所以执行下面这个分支 setPowerState(ALL_BRIGHT);//设置手机电源状态为ALL_BRIGHT,即屏幕、按键灯都打开 } synchronized (mLocks) { mDoneBooting = true; //根据情况启用LightSensor enableLightSensorLocked(mUseSoftwareAutoBrightness&&mAutoBrightessEnabled); longidentity = Binder.clearCallingIdentity(); try {//通知BatteryStatsService,它将统计相关的电量使用情况,后续再分析它 mBatteryStats.noteScreenBrightness(getPreferredBrightness()); mBatteryStats.noteScreenOn(); }...... } ~~~ systemReady主要工作为: - PMS创建SensorManager,通过它可与对应的传感器交互。关于Android传感器系统,将放到本书后续章节讨论。PMS仅仅启用或禁止特定的传感器,而来自传感器的数据将通过回调的方式通知PMS,PMS根据接收到的传感器事件做相应处理。 - 通过setPowerState函数设置电源状态为ALL_BRIGHT(不考虑UseSoftwareAutoBrightness的情况)。此时屏幕及键盘灯都会点亮。关于setPowrState函数,后文再做详细分析。 - 调用BatteryStatsService提供的函数,以通知屏幕打开事件,在BatteryStatsService内部将处理该事件。稍后,本章将详细讨论BatteryStatsService的功能。 当系统中的服务都在systemReady中进行处理后,系统会广播一次ACTION_BOOT_COMPLETED消息,而PMS也将处理该广播,下面来分析。