进行中的,经常更新的通知的最新方法(“通知小部件”)

时间:2018-12-09 16:03:16

标签: android broadcastreceiver alarmmanager intentservice android-jobscheduler

我正在努力寻找经常更新的通知(例如每3分钟)的最新技术。似乎在较新的Android版本中进行了大量的电源效率调整(幸运的是!),以至于我之前成功使用的方法(使用BroadcastReceiverAlarmManager.setRepeating)似乎无法在我的设备上可靠地工作。较新的手机(与Android 8一起运行)。在某些时候,通知将不再更新(例如,在屏幕关闭几分钟后)。

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

  • 使用AlarmManager.setAndAllowWhileIdle而不是setRepeating
  • 使用WakefulBroadcastReceiver(虽然已经过时了)
  • 使用IntentService代替BroadcastReceiver
  • 使用JobIntentService代替IntentService
  • 使用JobScheduler代替AlarmManager

是否有人找到一种可靠的方式来频繁更新状态栏通知?对我来说,每隔X秒钟准确更新一次并不重要,它应该每隔几分钟进行一次,并且在设备进入深度睡眠一段时间后不会被随机破坏。

1 个答案:

答案 0 :(得分:0)

我真的不明白为什么这个问题会被否决,因为我认为,如果您偶然发现所有这些不同的方法,就会有造成混淆的合法原因,而且如果有人与他分享他或她的经验,那真的可以为我节省一些时间我。

我知道这个问题很难回答,因为所有不同的制造商和电话,都包括不同类型的节能调整。但是无论如何,这是一段时间后我想到的。在我的情况下,问题是在Android 8+中,Google严格限制了为BroadcastReceiverIntentServices等工作而允许使用JobScheduler的可能性。这使得必须使用JobIntentService,为Android 8+提供必需的功能,并为Android版本<8提供向后兼容性。

tl; dr:

  • 拥有JobIntentService,您在onHandleWork内部要做的事情
  • 有一个BroadcastReceiver,在onReceive()中,您只需调用JobIntentService的{​​{1}}方法。
  • 使用enqueueWork()内的AlarmManager来安排(例如使用JobIntentService#onHandleWork())并取消setInexactRepeating()的{​​{1}}广播。