android - Oreo 的后台执行限制
问题描述
嗨,所有的 Android 极客,
我正在开发一个针对 Android Oreo (O) 的 Android 应用程序。
minSdkVersion 21
targetSdkVersion 27
我知道运行后台服务是有限制的,我可以通过使用startForeground(...)
服务方法来克服它们。
我的疑问是;我应该将此startForeground(...)
方法用于所有 android 版本吗?由于调用此方法将显示一条通知,因此我希望尽可能避免在奥利奥之前的版本中使用它。
那么,为了避免在奥利奥之前的设备中显示通知,我可以使用下面的代码片段吗?它会在奥利奥前后都在后台工作吗?
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O /* 26 */) {
// Make the service as foreground service by calling startForeground method
} else {
// Nothing to do
}
总结一下我的问题:
targetSdkVersion 27
和minSdkVersion 21
MyService
应该在Oreo 之前和之后 Oreo OS 版本中在后台运行- 是否可以限制
startForeground(...)
仅用于发布 Oreo OS 版本的使用
解决方案
MyService 应该在 Oreo 之前和 Oreo 操作系统版本之后在后台运行。是否可以限制 startForeground(...) 的使用仅用于发布 Oreo OS 版本?
是的,可以这样使用它。
将Service
在pre-oreo
设备的后台运行,但如果用户杀死你的应用程序,它Service
也会死掉,除非你也使用startForeground
pre-oreo。
推荐阅读
- javascript - 为什么要在不更改旧数组的情况下获得新的有序数组?
- python - 嵌套字典访问和值返回
- python-3.x - 如何每次尝试将用户输入限制为一个字符串 - Python
- javascript - 如何以任何语言仅获取日期对象中的 timeZoneName?
- azure-data-explorer - Kusto !has_any | 其中 value 不包含 set 中的任何值
- jmeter-5.0 - jmes path assertion failing in jmeter
- node.js - 匿名中间件的响应时间长
- java - 对linkedList 进行排序是否需要更长的时间?
- asp.net - 外键未使用子表的主键更新
- typescript - 打字稿找不到模块(TS2307)