用于持续、频繁更新通知的最先进方法 ("notification widget")

State-of-the-art method for ongoing, frequently updating notifications ("notification widget")

我正在努力为经常更新(例如每 3 分钟)的通知找到当前最先进的方法。似乎在较新的 Android 版本中内置了如此多的能效调整(幸运的是!),以至于我之前成功使用的方法(使用 BroadcastReceiverAlarmManager.setRepeating)似乎并不可靠在我的新 phone (运行 Android 8) 上继续工作。在某些时候,通知将不再更新(例如,在屏幕关闭几分钟后)。

现在我偶然发现了许多不同的方法来解决这个问题,我在它们之间有点迷茫,例如:

有没有人找到可靠的方法来频繁更新状态栏通知?对我来说,准确每 X 秒更新一次并不重要,它应该每隔几分钟发生一次,而不是在设备深度睡眠一段时间后随机中断。

我真的不明白为什么这个问题被否决了,因为在我看来,如果你偶然发现所有这些不同的方法,那么混淆是有正当理由的,如果有人分享了他或她的方法,那真的会节省我一些时间和我一起体验。

我知道这个问题很难回答,因为所有不同的制造商和手机,都包括不同类型的省电调整。但无论如何,这是我一段时间后想出的。在我的案例中,问题是在 Android 8+ 中,Google 强烈限制了为 BroadcastReceivers、IntentServices 等工作的授予可能性,以支持使用JobScheduler。这使得必须使用 JobIntentService,为 Android 8+ 提供所需的功能,并为 Android 版本 < 8.

提供向后兼容性

tl;博士:

  • 有一个JobIntentService,你可以在onHandleWork
  • 里面做什么
  • 有一个 BroadcastReceiver,在 onReceive() 中,您只需调用 JobIntentServiceenqueueWork() 方法。
  • 使用 JobIntentService#onHandleWork() 中的 AlarmManager 来安排(例如使用 setInexactRepeating())并取消 BroadcastReceiverPendingIntent 广播。