为什么重复任务与警报管理器在Android上不准确?

时间:2017-08-07 10:29:53

标签: android service alarmmanager kill repeatingalarm

我正在开发一个应用程序,您可以安排时间,它会像谷歌日历一样及时提醒您。我使用AlarmManager类并设置重复任务,每隔一分钟检查数据库,看看是否有任何警报。

@Override
public void onReceive(Context context, Intent intent) {

    Calendar now = Calendar.getInstance();

    doRepeatingWorks(now.getTimeInMillis()); // Like Checking if one day passed to do some tasks

    checkDbIfThereIsSomeSchedule(now);
}

我称之为启动闹钟管理器:

    public void setAlarm(Context context) {
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            Intent intent = new Intent(context, AlarmReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), G.ALARM_CHECK_INTERVAL_MILIS, pendingIntent);
}

但这是不准确的,有时我发现任务杀手应用程序会扼杀我的警报并使其完全没用。

虽然使用foregroundService会耗费电量,并且会通知用户。

这个问题是否有任何解决方案或替代方案?

2 个答案:

答案 0 :(得分:3)

  

我使用AlarmManager类并设置重复任务,每隔一分钟检查一次数据库,看看当时是否有任何警报

这是一个非常糟糕的方法。这种行为正是Android 6.0中添加了Doze模式和app待机的原因。

  

这个问题是否有任何解决方案或替代方案?"

为第一个事件安排警报事件。获得控制权后,通知用户该事件,然后按顺序为下一个事件安排警报事件。如果用户添加的事件比第一个事件更早,请取消上一个警报并为新的第一个事件安排一个。

答案 1 :(得分:0)

您不需要每1分钟检查一次警报。我希望这篇文章可以帮助你 - Scheduled Alarm Manager not working Android