gpt4 book ai didi

android - 如何为 Android 26+ 实现强大的闹钟应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:10 31 4
gpt4 key购买 nike

我的爱好是维护一个闹钟应用程序,我最近开始将其迁移到目标 API 级别 26。由于后台服务限制,我的应用程序不再可靠地运行。

当前的实现是这样的:

  1. 用户在 UI 中设置闹钟
  2. android.app.AlarmManager#setAlarmClock 以 PendingIntent.getBroadcast 作为负载调用
  3. 当警报响起时,BroadcastReceiver 获取它
  4. 首先,它获取一个唤醒锁
  5. 然后它启动一个服务
  6. 服务处理事件并产生更多事件,例如为音乐启动其他服务、启动 Activity 或通知
  7. 释放唤醒锁

使用 Target SDK 25 一切都很好。使用 target 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 点中的服务不仅处理警报触发事件,还处理时区更改、从通知中发送的多个用户交互 Intent 等。它不能是前台服务。

Android 文档建议在这种情况下使用 JobScheduler,但 JobScheduler 不保证作业会及时执行。这违背了闹钟的目的。

当使用 android.app.AlarmManager#setAlarmClock 设置的警报被触发时,我有哪些选项可以可靠地执行代码?

谢谢

最佳答案

在我尝试了很多方法之后,我得出了这个结论:执行代码的唯一可靠方法是在BroadcastReceiver 中执行或启动前台服务。其他一切都被证明是不可靠的。

那么,回到大胖 BroadcastReceivers!

关于android - 如何为 Android 26+ 实现强大的闹钟应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54342933/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com