Android_Doze_状态切换
2020-06-30 15:06:11 6 举报
Android Doze模式的状态切换
作者其他创作
大纲/内容
1。handleMotionDetectedLocked是通过调用becomeActiveLocked改变到ACTIVE,但又会调用了becomeInactiveIfAppropriateLocked把状态切换到INACTIVE2。becomeActiveLocked会被如下的情况被调用handleMotionDetectedLocked 设备有移动exitIdleInternal 其它模块远程调用updateInteractivityLocked 亮屏updateChargingLocked 充电keyguardShowingLocked 锁屏显示exitForceIdleLocked Cmd命令stepIdleStateLocked 有Alarm要来了
stepIdleStateLocked
STATE_INACTIVETimeOut时长:mInactiveTimeout有MOTION_INACTIVE_TIMEOUT和INACTIVE_TIMEOUT注意mPreIdleFactor因子Timeout 的Alarm触发到PENDING状态
STATE_IDLETimeOut时长:mNextIdleDelay会在第一次进入时为IDLE_TIMEOUT,连续的与MAINTENANCE切换会通过IDLE_FACTOR系数改变,最大为IDLE_TIMEOUT超时切入MAINTENANCE状态
进入IDLE_PENDING时通过startMonitoringMotionLocked启动SMD体感检测
becomeInactiveIfAppropriateLocked() AND Quick Doze enabled
时进MAINTENANCE时会发送消息MSG_REPORT_IDLE_OFF来处理MAINTENANCE中的事务,主要是临时打开Doze限制。
STATE_LOCATINGTimeOut时长:LOCATING_TIMEOUT在超时前 定位成功才会切入到IDEL
Quick Doze一般情况是Disalbe,主要是Battery PowerSave打开的时候才会走到这个状态,一般情况下QuickDoze是Disable的
stepIdleStateLockedexitMaintenanceEarlyIfNeededLocked
STATE_ACTIVE
STATE_SENSINGTimeOut时长:SENSING_TIMEOUTmotion result 为RESULT_STATIONARY才会切入LOCATION状态
STATE_QUICK_DOZE_DELAY
STATE_IDLE_MAINTENANCETimeOut时长:mNextIdlePendingDelay会在第一次进入为IDLE_PENDING_TIMEOUT,连续的与IDEL切换会通过IDLE_PENDING_FACTOR系数改变,最大值为MAX_IDLE_PENDING_TIMEOUT超时会切入IDLE状态
STATE_IDLE_PENDINGTimeOut时长:IDLE_AFTER_INACTIVE_TIMEOUT注意mPreIdleFactor因子TimeOut的Alarm触发到SENSING状态
becomeInactiveIfAppropriateLocked() AND Quick Doze not enabled
进入IDEL时会有如下的动作。cancelAlarmLocked(); 取消目前所有的其它还在的状态切换的ALARM。cancelLocatingLocked(); 取消定位mAnyMotionDetector.stop();停止SensingmLightState = LIGHT_STATE_OVERRIDE; 覆盖掉Light Doze发送MSG_REPORT_IDLE_ON消息来进一步处理IDLE中的事务,主要是开启各种Doze限制。注意此时会开始持有mGoingIdleWakeLock 锁
进入INACTIVE状态时通过resetIdleManagementLocked重置相关的状态值mNextIdlePendingDelaymNextIdleDelaymNextLightIdleDelaymIdleStartTime cancelAlarmLocked()ancelSensingTimeoutAlarmLocked()cancelLocatingLocked()stopMonitoringMotionLocked()mAnyMotionDetector.stop()updateActiveConstraintsLocked();
becomeInactiveIfAppropriateLocked() AND Quick Doze enabled
Doze最终目标

收藏
0 条评论
下一页