我将“闹钟”应用程序作为一种爱好进行维护,最近我开始将其迁移到目标API级别26。由于后台服务限制,我的应用程序无法再可靠运行。
当前的实现方式如下:
使用Target SDK 25,一切都很好。使用taraget 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设置的警报时,我必须可靠地执行代码的哪些选项?
谢谢
答案 0 :(得分:1)
在尝试了多种方法之后,我得出了这样的结论:执行代码的唯一可靠方法是在BroadcastReceiver内执行或启动前台服务。事实证明,其他一切也不可靠。
所以,回到胖胖的BroadcastReceivers!