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

标签 android broadcastreceiver alarmmanager intentservice android-jobscheduler

我正在努力寻找一种当前最先进的方法来处理频繁更新的通知(例如每 3 分钟一次)。似乎在较新的 Android 版本中内置了如此多的电源效率调整(幸运的是!),我之前成功使用的方法(使用 BroadcastReceiverAlarmManager.setRepeating)确实如此在我的新手机(运行 Android 8)上似乎不再可靠地工作了。在某些时候,通知将不再更新(例如,在屏幕关闭几分钟后)。

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

  • 使用 AlarmManager.setAndAllowWhileIdle 链而不是 setRepeating
  • 使用 WakefulBroadcastReceiver(虽然已经再次弃用)
  • 使用 IntentService 而不是 BroadcastReceiver
  • 使用 JobIntentService 而不是 IntentService
  • 使用 JobScheduler 而不是 AlarmManager

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

最佳答案

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

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

tl;博士:

  • 有一个JobIntentService,您可以在其中执行onHandleWork
  • 有一个 BroadcastReceiver,在 onReceive() 中,您只需调用 JobIntentServiceenqueueWork()方法。
  • 使用 JobIntentService#onHandleWork() 中的 AlarmManager 进行调度(例如使用 setInexactRepeating())并取消 PendingIntent 为您的 BroadcastReceiver 广播。

关于android - 持续、频繁更新通知的最先进方法 ("notification widget"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694114/

相关文章:

java - Android Paging Library如何知道加载更多数据?

Android:findviewbyid:当 View 不在 setContentView 调用的同一布局上时,按 id 查找 View

android - Monodroid Intent Service 的 BroadcastReceiver 没有触发 OnReceive

android - NullPointerException 在 sendBroadcast() 从服务到 Activity

android - 具体时间通知

java - Android onClick() 任务全部同时发生

android - 与android和kotlin共享

android - BroadcastReceiver 和 IntentFilter 有什么区别?

java - 我可以在 Android 拔下电源并处于 hibernate 状态时唤醒它吗?

android - 通知中的字符串未更新