嗨,所有Android极客都在那里,
我正在开发针对Android Oreo(O)的Android应用程序。
minSdkVersion 21
targetSdkVersion 27
我知道运行后台服务有限制,我可以通过使用startForeground(...)
服务方法来克服它们。
我怀疑是;我应该为所有Android版本使用这个startForeground(...)
方法吗?由于调用此方法将显示通知,我希望在Oreo之前的版本中尽可能避免它。
因此,为了避免在Oreo之前的设备中显示通知,我可以使用下面的代码段吗?它会在奥利奥前后的背景下工作吗?
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 OS后版本的后台运行。是否可以限制仅在奥利奥操作系统版本后使用startForeground(...)?
是的,可以像这样使用它。
Service
将在pre-oreo
设备的后台运行,但如果用户杀死你的应用程序,Service
也会死亡,除非你使用startForeground
进行pre-oreo。
WorkManager适用于需要保证系统将运行它们的任务,即使应用程序退出启动前台在您的用例需要通知时也很好看,例如:备份,导航,位置更新。这样的操作开始前景完美契合。但还有其他情况,它不必显示通知。此外,应该始终在任务可延迟时使用。
WorkManager根据以下标准使用基础作业调度服务:使用JobScheduler for API 23+使用API 14-22的自定义AlarmManager + BroadcastReceiver实现
链接更多https://developer.android.com/reference/androidx/work/WorkManager?hl=en