我正在努力寻找经常更新的通知(例如每3分钟)的最新技术。似乎在较新的Android版本中进行了大量的电源效率调整(幸运的是!),以至于我之前成功使用的方法(使用BroadcastReceiver
和AlarmManager.setRepeating
)似乎无法在我的设备上可靠地工作。较新的手机(与Android 8一起运行)。在某些时候,通知将不再更新(例如,在屏幕关闭几分钟后)。
现在,为了解决这个问题,我偶然发现了许多不同的方法,在它们之间我有点迷路了,例如:
AlarmManager.setAndAllowWhileIdle
而不是setRepeating
链WakefulBroadcastReceiver
(虽然已经过时了)IntentService
代替BroadcastReceiver
JobIntentService
代替IntentService
JobScheduler
代替AlarmManager
是否有人找到一种可靠的方式来频繁更新状态栏通知?对我来说,每隔X秒钟准确更新一次并不重要,它应该每隔几分钟进行一次,并且在设备进入深度睡眠一段时间后不会被随机破坏。
答案 0 :(得分:0)
我真的不明白为什么这个问题会被否决,因为我认为,如果您偶然发现所有这些不同的方法,就会有造成混淆的合法原因,而且如果有人与他分享他或她的经验,那真的可以为我节省一些时间我。
我知道这个问题很难回答,因为所有不同的制造商和电话,都包括不同类型的节能调整。但是无论如何,这是一段时间后我想到的。在我的情况下,问题是在Android 8+中,Google严格限制了为BroadcastReceiver
,IntentServices
等工作而允许使用JobScheduler
的可能性。这使得必须使用JobIntentService
,为Android 8+提供必需的功能,并为Android版本<8提供向后兼容性。
tl; dr:
JobIntentService
,您在onHandleWork
内部要做的事情BroadcastReceiver
,在onReceive()
中,您只需调用JobIntentService
的{{1}}方法。enqueueWork()
内的AlarmManager
来安排(例如使用JobIntentService#onHandleWork()
)并取消setInexactRepeating()
的{{1}}广播。