每 60 秒更新一次持续通知

Update ongoing notification every 60 seconds

我的应用程序的一个核心功能是它有一个持续的通知和每分钟更新一次的倒数计时器 - 即使应用程序被 Android OS.[=12= 关闭]

首先,我使用一项服务来 运行 计时器并更新通知,但这是一个 memory/battery 猪。所以我改用 AlarmManager 来完成计时器和重复闹钟,每 60 秒左右唤醒一次以更新通知:

Intent repeatingIntent = new Intent(this, AlarmReceiver.class);
repeatingIntent.putExtra(PERFORM_ACTION, ALARM_ACTION_UPDATE_NOTIFICATION);
PendingIntent repeatingAlarmIntent = PendingIntent.getBroadcast(this, 
       REQUEST_CODE_UPDATE_NOTIFICATION, repeatingIntent, 0);
AlarmManager am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);       
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
    SystemClock.elapsedRealtime()+1000, 
    REPEATING_ALARM_INTERVAL*1000, repeatingAlarmIntent);

这适用于我试过的大多数设备(在 RAM/battery/CPU 上更友好),但例如在 Galaxy S6 上,重复警报仅每 5 分钟触发一次,甚至更少。它有时会在插入设备时按时触发,但非常不一致。我试过将重复间隔设置为 30 秒或更短,但没有效果,没有触发警报(我看到每次触发都在 LogCat 中)。其他非重复警报会按时触发。

什么是确保持续通知至少每 60 秒更新一次的好方法?除了返回使用服务(呃!再加上 OS 有时会在内存很少的设备上彻底终止服务),唯一想到的是设置 5 个不同的重复警报(具有不同的请求)代码),并以交错方式每 5 分钟触发一次。

even if the app gets shut down by Android OS

运气不好。当应用程序被 OS 杀死时,它就死了,不能做太多事情,包括。发布通知。

being triggered only every 5 minutes or even less frequentl

https://developer.android.com/reference/android/app/AlarmManager.html 说:

"注意:以API 19 (KITKAT) 开头的警报传递不准确: OS 将转移闹钟以尽量减少唤醒和电池使用。"

这里还有更多相关信息:https://developer.android.com/training/scheduling/alarms.html

不要使用 setRepeating(),而是使用 setExact() or setWindow(),并在每次触发时设置一个新警报。这在 API19 以上效果很好。