我维护一个闹钟应用程序作为业余爱好,我最近开始迁移到目标API级别26.由于后台服务限制,我的应用程序不再可靠地工作。
当前实现的工作方式如下:
使用Target SDK 25一切都很好。目标API 26应用程序可以从Doze中可靠地唤醒,但有时候点.5失败,因为应用程序在后台:
AlarmsService$Receiver: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.better.alarm.ACTION_FIRED flg=0x14 cmp=com.better.alarm/.model.AlarmsService (has extras) }: app is in background
点.6中的服务可以是前台服务,我没有遇到任何问题,但服务点.5不仅处理警报触发事件,还处理时区更改,从通知调度的几个用户交互意图等。它不能是前台服务。
Android文档建议在这种情况下使用JobScheduler,但JobScheduler不保证作业及时执行。这种打败了闹钟的目的。
当使用android.app.AlarmManager#setAlarmClock设置的警报被触发时,我有什么选项可靠地执行代码?
谢谢
在我尝试了很多方法后,我得出了这样的结论:执行代码的唯一可靠方法是在BroadcastReceiver中执行它或启动前台服务。一切都被证明是不可靠的。
所以,回到大胖子BroadcastReceivers!