持续运行后台服务

新手上路,请多包涵

我的目标是 sdk 版本 27,最低版本为 19,并试图获得在后台连续运行的服务。我尝试了不同的服务启动选项,但它仍然被该应用程序杀死。我尝试使用 BroadcastReceiver 在它被杀死时启动服务,但这给了我一个错误,说应用程序在后台并且无法启动服务所以我尝试使用 JobScheduler 并且给了我同样的错误。这应该怎么做?例如,如果我正在制作一个计步器应用程序,我如何才能让它在后台运行?

原文由 CaseyB 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 573
2 个回答

在 oreo 版本中,Android 定义 了对后台服务的限制

为了改善用户体验,Android 8.0(API 级别 26)对应用程序在后台运行时可以执行的操作施加了限制。

如果应用程序需要始终运行其服务,那么我们可以创建前台服务。

后台服务限制: 当应用处于空闲状态时,其对后台服务的使用存在限制。这不适用于前台服务,这些服务对用户来说更引人注目。

所以创建一个 前台服务。当您的服务正在运行时,您将在其中 向用户发出通知看到这个答案(还有很多其他的)

现在,如果您不想收到服务通知怎么办。有一个解决方案。

您可以创建一些周期性任务来启动您的服务,服务将完成其工作并自行停止。这样,您的应用程序就不会被视为耗尽电池电量。

您可以使用 Alarm ManagerJob SchedulerEvernote-JobsWork Manager 创建周期性任务。

  • 而不是告诉每个人的利弊。我只告诉你最好的。 工作管理器是周期性任务的最佳 解决方案。这是与 Android Architecture Component 一起引入的。
  • 与 Job-Scheduler(仅 >21 API)不同,它适用于所有版本。
  • 它还在 Doze-Standby 模式 后开始工作。
  • 制作一个 Android 启动接收器,用于在设备启动后安排服务。

我使用 Work-Manager 创建了永远运行的服务,它工作得很好。

原文由 Khemraj Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

自 Android 8.0 以来,引入了许多后台服务限制。

两种解决方案:

  1. 如果您需要完全控制任务和执行时间,则必须选择 Foreground Service 。优点:你的应用程序将被认为是活着的,那么操作系统就不太可能杀死它以释放资源。缺点:您的用户将始终看到前台通知。

  2. 如果您需要定期安排任务,那么 Work Manager (在 Google I/O 18 中引入)是最好的解决方案。该组件选择最佳的调度程序(Jobscheduler、JobDispatcher、AlarmManager..)。请记住,工作管理器 API 仅对需要保证执行且可延迟的任务有用。参考: Android 开发文档

原文由 Andrea Scalabrini 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题