首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android Oreo杀死后台服务,并在进入打瞌睡模式后清除挂起的告警、计划的作业

Android Oreo杀死后台服务,并在进入打瞌睡模式后清除挂起的告警、计划的作业
EN

Stack Overflow用户
提问于 2018-05-24 16:16:44
回答 4查看 8.1K关注 0票数 15

我的应用程序有一个运行的后台service,它会让用户获得最新的location,并每五分钟将其更新到服务器。为了连续运行这个location更新过程,我使用警报管理器从service本身设置它的下一次执行时间。然而,当我在运行Android 8.1Nokia 6中安装应用程序时,它会工作一段时间,如果我让手机空闲一段时间,我的service将被应用程序从系统alarm manager中清除的下一个警报杀死。我的猜测是,空闲时间使手机进入doze mode。然而,我不明白为什么警报管理器被清除了。据我所知,doze mode应该定期打开维护窗口来执行任何挂起的任务。

为了缓解这个问题,我尝试在每15分钟运行一次的AlarmManager之上应用一个JobScheduler service。此jobscheduler的目的是重新启动包含alarmmanagerservice,因此即使它被杀死并清除警报,jobscheduler也会重新启动service

在我测试了这个补丁并让它进入idle mode一段时间后,它导致了JobScheduler ServiceService,其中的警报随着计划的作业和警报从系统中清除而被杀死。

安卓文档中说,我们可以使用JobScheduler来缓解其后台执行限制。为了测试这一点,当我测试应用程序时,我强制关闭了两个services,但已经安排的作业没有被清除,这使得带有警报的service再次成功运行。我不明白这种行为的原因,尽管Evernote的人给出的解释可能与这里的Android Job by Evernote中的场景相匹配

对这种不正常的行为有什么想法吗?

测试环境详细信息

Nokia 6 (TA-1021)

  • OS:Android 8.1.0

  • 设备
EN

回答 4

Stack Overflow用户

发布于 2018-06-01 17:03:32

你将无法在Oreo中运行长时间运行的后台服务,因为有行为改变,现在Oreo优化系统内存,电池等,它杀死了后台服务,为了解决你的问题,你应该使用前台服务。

查看后台执行限制https://developer.android.com/about/versions/oreo/android-8.0-changes

我的一个建议是,如果你可以使用FCM,那么就去吧,因为像WeChat,Facebook这样的应用程序使用它来发送通知,他们不会面临任何问题……

希望这有助于理解这个问题……

票数 4
EN

Stack Overflow用户

发布于 2018-05-27 14:38:47

在Doze more中,警报不会被重置,而是被推迟到以后的时间。这里有两个主流选项:

  1. 使用setAndAllowWhileIdle()setExactAndAllowWhileIdle()。但是,它们也可以以1 time per 9 minutes的最大频率触发。因此,你必须降低在你的应用程序中获取位置的频率。
  2. 通过显示前台通知的方式使用foreground service。每个人都在这么做(像Uber,Google Maps等应用程序)。这样,您的服务就不会被终止,并被视为打开了应用程序。
票数 1
EN

Stack Overflow用户

发布于 2018-05-27 17:39:01

我现在正面临着同样的问题,并且像你一样做着同样的工作。也就是说,将作业调度程序设置为定期作业,以便每隔15分钟启动一次前台服务,以防它因任何原因而被终止,例如任务被终止。这在之前的奥利奥版本上就像是一个护身符。

对于Oreo,目前我所能想到的唯一解决方案是,允许应用程序在设置中自动启动。安装的应用程序不足,即。那它应该又能像之前的奥利奥一样工作了。我听说但尚未测试的是,在作业调度器中设置setPersisted(true)选项。如果有帮助,请告诉我

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50504296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档