На некоторых телефонах Samsung нам, к сожалению, пришлось выяснить, что AlarmManager (SamsungAlarmManager) работает не так, как ожидалось.
Наш код:
private void scheduleNextSamplingIntent(final Context context, final int intervalInMillis) {
Log.v(TAG, "scheduleNextSamplingIntent | intervalInMillis = " + intervalInMillis);
if (intervalInMillis <= 0) {
Log.w(TAG, "scheduleNextSamplingIntent | invalid interval " + intervalInMillis);
return;
}
long currentTimeMillis = DeviceClock.getInstance().getCurrentTimeMillis();
long triggerAtMillis = currentTimeMillis + intervalInMillis;
Log.v(TAG, "scheduleNextSamplingIntent | currentTimeMillis = " + currentTimeMillis);
Log.v(TAG, "scheduleNextSamplingIntent | triggerAtMillis = " + triggerAtMillis);
PendingIntent samplingPendingIntent = getSamplePendingIntent(context);
AlarmManagerCompat alarmManager = new AlarmManagerCompat(context);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, samplingPendingIntent);
}
Мы подозреваем, что приложениебудет пробужден через некоторое время (например, 1 мин), но иногда таймер просыпается на несколько минут слишком поздно!
Вывод logcat:
10-25 15:26:03.118 32734 32734 I MotionDetectorService: Analyzed motion: SLEEPING
10-25 15:26:03.120 32734 32734 D MotionDetector: symptomaticStateGracePeriodOver ? 1540473963119 - 1540473823091 = 140028 ?> 300000
10-25 15:26:03.120 32734 32734 D MotionDetector: Still symptomatic but grace period not over yet. Keep gracing ...
10-25 15:26:03.121 32734 32734 V MotionDetectorService: notifyListeners | MotionDetector
10-25 15:26:03.121 32734 32734 V MotionDetectorService: scheduleNextSamplingIntent | intervalInMillis = 13000
10-25 15:26:03.122 32734 32734 V MotionDetectorService: scheduleNextSamplingIntent | currentTimeMillis = 1540473963121
10-25 15:26:03.122 32734 32734 V MotionDetectorService: scheduleNextSamplingIntent | triggerAtMillis = 1540473976121
10-25 15:26:03.137 3781 4353 D SamsungAlarmManager: setExact Intent (T:0/F:5/AC:false) 20181025T153059 - CU:10227/CP:32734
Таймер должен быть активированна 1540473976 (Unix) => 2018-10-25T15: 26: 16
Но почему для SamsungAlarmManager установлено значение 15: 30: 59?
Что здесь не так?Есть предложения?
(Кажется, что проблема только на устройствах Samsung S8 и Samsung S7 с Android 8.0)