Обзор логики восприятия в DeviceIdleController
Я пытаюсь просмотреть и узнать код из Android DeviceIdleController
и я не могу полностью понять логику ощущения таймаута. Код выглядит мне не очень надежным...
mSensingTimeoutAlarmListener
может вызвать becomeInactiveIfAppropriateLocked
только когда это в SENSING
состояние, но в becomeInactiveIfAppropriateLocked
только ACTIVE
состояние будет рассматриваться.
private final AlarmManager.OnAlarmListener mSensingTimeoutAlarmListener
= new AlarmManager.OnAlarmListener() {
@Override
public void onAlarm() {
if (mState == STATE_SENSING) {
synchronized (DeviceIdleController.this) {
becomeInactiveIfAppropriateLocked();
}
}
}
};
а также
void becomeInactiveIfAppropriateLocked() {
if ((!mScreenOn && !mCharging) || mForceIdle) {
if (mState == STATE_ACTIVE && mDeepEnabled) {
mState = STATE_INACTIVE;
...
}
if (mLightState == LIGHT_STATE_ACTIVE && mLightEnabled) {
...
}
}
}
Как это может работать как хотелось бы? только если состояние изменяется с SENSING
в ACTIVE
между onAlarm
а также becomeInactiveIfAppropriateLocked
,
это будет работать?? как говорится в коде
/**
* If we don't receive a callback from AnyMotion in this amount of time +
* {@link #LOCATING_TIMEOUT}, we will change from
* STATE_SENSING to STATE_INACTIVE, and any AnyMotion callbacks while not in STATE_SENSING
* will be ignored.
* @see Settings.Global#DEVICE_IDLE_CONSTANTS
* @see #KEY_SENSING_TIMEOUT
*/
public long SENSING_TIMEOUT;