I am working on an alarm application. Users can set alarms in the application and some actions have to do when one of the alarms triggered. I used the first alarm manager set method. But only the first alarm worked right time. Others triggered after almost 5 minutes of delayed.
Intent intent = new Intent(applicationContext, OneShotAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(applicationContext, 0,
intent, FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) applicationContext.getSystemService(ALARM_SERVICE);
alarmManager.cancel(sender);
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), sender);
Later, I found this. I changed set method to setexact method and all alarms looked like working perfectly.
alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), sender);
But I saw sometimes still triggered with delay. Something like 5-8 minutes.
Where is my wrong?
UPDATE:
I kept log files when I first detect the error. I saw delay times in log files. Some of pre setexact method logs like below:
16:30:59 Next alarm set to 24/05/2020 16:35:00
16:35:00 Alarm triggered
16:35:00 Notification Sent
16:35:00 Next alarm set to 24/05/2020 16:40:00
16:44:47 Alarm triggered
16:44:47 Notification Sent
16:44:47 Next alarm set to 24/05/2020 16:50:00
16:54:48 Alarm triggered
16:54:48 Notification Sent
16:54:48 Next alarm set to 24/05/2020 18:00:00
And some of post setexact method logs like below:
03:00:00 Alarm triggered
03:00:00 Notification Sent
03:00:00 Next alarm set to 25/05/2020 07:00:00
07:08:14 Alarm triggered
07:08:15 Notification Sent
07:08:15 Next alarm set to 25/05/2020 08:30:00
08:34:47 Alarm triggered
08:34:47 Next alarm set to 25/05/2020 09:00:00
09:00:00 Alarm triggered
09:00:00 Next alarm set to 25/05/2020 18:00:00
UPDATE: My alarm set code is inside of a method. I call it after every data update or triggered alarm. This way, I make sure always the next alarm can be set.