我正在努力寻找一种当前最先进的方法来处理频繁更新的通知(例如每 3 分钟一次)。似乎在较新的 Android 版本中内置了如此多的电源效率调整(幸运的是!),我之前成功使用的方法(使用 BroadcastReceiver
和 AlarmManager.setRepeating
)确实如此在我的新手机(运行 Android 8)上似乎不再可靠地工作了。在某些时候,通知将不再更新(例如,在屏幕关闭几分钟后)。
现在我偶然发现了许多不同的方法来解决这个问题,我在它们之间有点迷茫,例如:
- 使用
AlarmManager.setAndAllowWhileIdle
链而不是setRepeating
- 使用
WakefulBroadcastReceiver
(虽然已经再次弃用) - 使用
IntentService
而不是BroadcastReceiver
- 使用
JobIntentService
而不是IntentService
- 使用
JobScheduler
而不是AlarmManager
有没有人找到可靠的方法来频繁更新状态栏通知?对我来说,准确每 X 秒更新一次并不重要,它应该每隔几分钟发生一次,而不是在设备进入深度 sleep 一段时间后随机中断。
最佳答案
我真的不明白为什么这个问题被否决了,因为在我看来,如果你偶然发现所有这些不同的方法,那么混淆是有正当理由的,如果有人分享他或她的经验,这真的会节省我一些时间我。
我知道这个问题很难回答,因为所有不同的制造商和手机,都包括不同类型的省电调整。但无论如何,这是我一段时间后想出的。我遇到的问题是,在 Android 8+ 中,谷歌强烈限制了为 BroadcastReceiver
、IntentServices
等工作授予的可能性,以支持使用 JobScheduler
。这使得必须使用 JobIntentService
,提供 Android 8+ 所需的功能以及 Android 版本 < 8 的向后兼容性。
tl;博士:
- 有一个
JobIntentService
,您可以在其中执行onHandleWork
- 有一个
BroadcastReceiver
,在onReceive()
中,您只需调用JobIntentService
的enqueueWork()
方法。 - 使用
JobIntentService#onHandleWork()
中的AlarmManager
进行调度(例如使用setInexactRepeating()
)并取消PendingIntent
为您的BroadcastReceiver
广播。
关于android - 持续、频繁更新通知的最先进方法 ("notification widget"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694114/