Прежде всего мне известны другие вопросы по этому поводу, такие как: планирование будильника на каждую секунду в Android 5.1 или Как использовать Android AlarmManager с небольшими интервалами, например, 1 минута?
Таким образом, в основном говорится, что это поведение с небольшими интервалами является таким, как предполагалось, из-за оптимизации системы.А что мало?Речь шла о настройке будильника каждые несколько секунд.Но как насчет минут?Та же проблема?Какие интервалы начнут вести себя ближе к запланированному времени?Часы?Дни?И, похоже, они говорят об установке повторяющихся интервалов с помощью setRepeating .
Так вот с чем я борюсь.Я пытаюсь настроить сигналы тревоги каждые 5 минут (300000 миллисекунд). Это все еще слишком мало?И я пытаюсь сделать это через set или даже setExact или setWindow .После первого срабатывания тревоги я устанавливаю новый на 300000 мс.Вот как я настраивал изначально:
//initially somewhere I call:
IntervalScheduler.createAlarm(context!!, 300000)
...
//which is this:
object IntervalScheduler
{
fun createAlarm(ctx: Context, milliseconds: Long)
{
val intent = Intent(ctx, AlarmReceiver::class.java)
val alarmManager = ctx.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val pendingIntent = PendingIntent.getBroadcast(ctx, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)
if (Build.VERSION.SDK_INT >= KITKAT)
{
// doesn't help
//alarmManager.setExact(AlarmManager.RTC_WAKEUP, milliseconds, 60000, pendingIntent)
// this doesn't help as well - trying to give it a window of 1 minute
alarmManager.setWindow(AlarmManager.RTC_WAKEUP, milliseconds, 60000, pendingIntent) // doesn't help
}
else
{
alarmManager.set(AlarmManager.RTC_WAKEUP, milliseconds, pendingIntent)
}
}
}
// this gets called fine
class AlarmReceiver: BroadcastReceiver()
{
override fun onReceive(context: Context?, intent: Intent?)
{
Log.i("NOTE","Notifying")
// create next alarm
IntervalScheduler.createAlarm(context!!, 300000)
}
}
Вот итоговый журнал:
09-21 22:21:53.846 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:22:54.812 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:23:55.023 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:24:00.655 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:24:06.085 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:24:11.616 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:24:17.193 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:24:22.674 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:24:28.164 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:24:33.852 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:25:34.815 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:26:57.604 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:28:14.842 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:29:14.968 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:30:15.275 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:31:15.459 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:32:15.644 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:33:15.834 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:34:15.941 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:35:16.143 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:36:17.804 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:37:17.969 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:37:23.686 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:37:29.131 26982-26982/com.sykes I/NOTE: Notifying
09-21 22:37:34.749 26982-26982/com.sykes I/NOTE: Notifying
Это не где-то около 5 минут.На самом деле это редко больше минуты.Как и последние 4 звонка, произошедших за одну минуту.Система оптимизирует время от 5 минут до 6-5 секунд?
Это все так же, как и ожидалось?Будет ли это намного ближе к ожиданиям, если установить 3600000 (1 час) или 86400000 (24 часа)?