为什么使用警报管理器重复任务在 android 上不准确?

Why repeating tasks with alarm manager are not accurate on android?

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

@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 会消耗电池电量,而且通知会影响用户的神经。

这个问题有什么解决方案或替代方案吗?

您不需要检查每 1 分钟是否有一个警报。我希望这 post 对你有帮助 -

I use AlarmManager class and set a Repeating task to check Database every one minute and see if there is any alarm on that time or not

这是一个非常糟糕的方法。这种行为正是在 Android 6.0.

中添加打盹模式和应用待机的原因

Is there any solutions or alternatives for this problem?"

为第一个事件安排一个警报事件。当您获得控制权时,将事件通知用户,然后按顺序为下一个事件安排警报事件。如果用户添加的新事件早于您的第一个事件,请取消之前的警报并为新的第一个事件安排一个。