gpt4 book ai didi

android - 作为业务需求,我必须让我的后台服务在我的 android 应用程序中始终运行

转载 作者:太空狗 更新时间:2023-10-29 13:10:49 25 4
gpt4 key购买 nike

经过将近 3 周的研究,我决定提出这个问题。

要求是我的应用程序只有一个后台服务,并且必须一直搜索 BLE 设备。 (当没有 BLE 设备在我暂停和恢复扫描的范围内时,不要 panic 我已经设置了慢速扫描模式)。该应用程序并不适合所有人,因为它的目的是在 BLE 设备进入范围时对其进行一些身份验证。希望这确立了服务始终运行的重要性。我不能使用前台服务(业务需求)。

每当 android 终止我的服务时,onDestroy() 都不会被调用。所以我最好的办法是使用一个警报管理器,它每 5 分钟触发一次,并检查服务是否被终止,如果被终止,它会调用 startService()。警报可以正常触发一段时间,但在随机时间(1、2、3 小时)后,甚至警报也会被终止,并且不再触发。

我正在通过警报发送一个广播,它的 onReceive() 负责在服务被终止时启动该服务。我没有解决方法,任何人都可以解释或建议为什么警报管理器在某个随机时间后出现故障。我目前正在 nexus 6p、Galaxy s7 edge、三星 A5、华为 P9 上测试我的应用程序。

可以提供任何更多的解释。

最佳答案

Alarm triggers fine for some time but after random times (1, 2 3 hours) even the alarm gets killed and it doesn't trigger anymore.

如果 adb shell dumpsys alarm 没有显示您的警报,那么您可能会说“警报被杀死”。这通常不会发生,除非用户在设置中使用强制停止。

但是,最有可能的是,警报本身就在那里。但是,该设备已进入 Doze mode ,因此您的警报将被忽略。您的选择是:

  • 尝试 setAndAllowWhileIdle(),它可能不会像您希望的那样频繁发送,或者

  • 让用户将您的应用添加到电池优化白名单,请记住用户可能会选择不这样做,或者

  • 让用户始终将设备插上电源,记住用户可以选择不这样做

I'm sending a broadcast thrugh the alarm whose onReceive() is responsible for starting the service if it is killed

除非您正在使用 WakeLock(小心),否则设备有可能在您的服务真正开始之前重新进入休眠状态。

关于android - 作为业务需求,我必须让我的后台服务在我的 android 应用程序中始终运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41266480/

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