android - Oreo:JobService 不需要 startForeground 吗?
问题描述
作为测试,我从我们拥有的工作服务中删除了“startForeground(通知)”,它似乎仍在工作。
我们是否不需要在 Android O 及更高版本上发布工作服务的前台通知?
我无法找到这方面的具体文档。
任何参考都会很棒。
太感谢了
编辑
对于那些有同样问题的人,我已经在生产环境中测试了几天。我们的应用程序有一个持续的通知,我一直在从作业服务启动/更新它而没有调用 startForeground 并且在 crashlytics 中没有看到任何安全异常。我有信心说:
对于短期运行的任务,您不需要从作业服务调用 startForeground(异常很可能适用于正在进行的任务。我的代码只是进行 api 调用并更新通知视图)
感谢 0X0nosugar 和 WasabiTea
解决方案
为了降低出现这些问题的可能性,Android 8.0 对应用程序在用户不直接与其交互时可以执行的操作进行了限制。应用程序受到两种方式的限制:
后台服务限制:当应用程序处于空闲状态时,它对后台服务的使用受到限制。这不适用于前台服务,这些服务对用户来说更明显。
广播限制:除了有限的例外,应用程序不能使用它们的清单来注册隐式广播。他们仍然可以在运行时注册这些广播,并且他们可以使用清单来注册专门针对他们的应用程序的显式广播。
在大多数情况下,应用程序可以通过使用 JobScheduler 作业来解决这些限制。这种方法让应用程序在应用程序未主动运行时安排执行工作,但仍为系统提供了以不影响用户体验的方式安排这些工作的余地。Android 8.0 对 JobScheduler 进行了多项改进,可以更轻松地用预定作业替换服务和广播接收器;有关详细信息,请参阅 JobScheduler 改进。
原始文档在这里 - https://developer.android.com/about/versions/oreo/background
希望这可以帮到你
推荐阅读
- python - 使用多处理将一个 python 列表复制到另一个
- amazon-web-services - Terraform,将几个子网传递给自动缩放组
- shiny - 在输出格式之间切换,同时从 Shiny 生成可下载的 RMarkdown 报告
- elasticsearch - 在 Elasticsearch 数组中查找任何不等于 X 的值
- azure-devops - 在管道任务中定义和使用的 Release.Name 格式
- html - 背景图像未在 CSS/HTML 中显示
- c - Gtk_entry 为 NULL
- python - 两个 for 循环的向量化
- google-apps-script - 如何获取在 Google Drive 中复制文件的目的地?
- javascript - 如何遍历对象以找出值大于 0 的“时间段”?