Обзор логики восприятия в 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;

0 ответов

Другие вопросы по тегам