我的目标是 sdk 版本 27,最低版本为 19,并试图获得在后台连续运行的服务。我尝试了不同的服务启动选项,但它仍然被该应用程序杀死。我尝试使用 BroadcastReceiver 在它被杀死时启动服务,但这给了我一个错误,说应用程序在后台并且无法启动服务所以我尝试使用 JobScheduler 并且给了我同样的错误。这应该怎么做?例如,如果我正在制作一个计步器应用程序,我如何才能让它在后台运行?
原文由 CaseyB 发布,翻译遵循 CC BY-SA 4.0 许可协议
自 Android 8.0 以来,引入了许多后台服务限制。
两种解决方案:
如果您需要完全控制任务和执行时间,则必须选择 Foreground Service 。优点:你的应用程序将被认为是活着的,那么操作系统就不太可能杀死它以释放资源。缺点:您的用户将始终看到前台通知。
如果您需要定期安排任务,那么 Work Manager (在 Google I/O 18 中引入)是最好的解决方案。该组件选择最佳的调度程序(Jobscheduler、JobDispatcher、AlarmManager..)。请记住,工作管理器 API 仅对需要保证执行且可延迟的任务有用。参考: Android 开发文档
原文由 Andrea Scalabrini 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答963 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答840 阅读✓ 已解决
2 回答949 阅读
2 回答889 阅读
1 回答823 阅读
2 回答692 阅读
在 oreo 版本中,Android 定义 了对后台服务的限制。
如果应用程序需要始终运行其服务,那么我们可以创建前台服务。
所以创建一个 前台服务。当您的服务正在运行时,您将在其中 向用户发出通知。 看到这个答案(还有很多其他的)
现在,如果您不想收到服务通知怎么办。有一个解决方案。
您可以使用 Alarm Manager 、 Job Scheduler 、 Evernote-Jobs 或 Work Manager 创建周期性任务。
我使用 Work-Manager 创建了永远运行的服务,它工作得很好。