我使用com.firebase.jobdispatcher.JobService
来同步数据,我是通过使用Job
安排FirebaseJobDispatcher
启动它。
问题:在我第一次启动应用程序之前,我不喜欢延迟。
有没有一种方法可以在Android O上作为前台服务(带通知)在我第一次使用它时启动服务? (而不是将其安排为工作)
我试过了:
ContextCompat.startForegroundService(context, intent);
但这不会调用JobService
的onCreate。
答案 0 :(得分:3)
结论:使用两种服务。
无法在前台启动com.firebase.jobdispatcher.JobService
。
普通Service
无法以预定的Job
启动。
我创建了两个启动相同sync-flow的服务类:fixed。
答案 1 :(得分:2)
我建议您使用Oreo中引入的新JobIntentService,而不是FirebaseJobDispatcher。然后,您可以从应用程序的前台启动后台服务(现在不能自由地允许在后台创建的后台服务,在您必须显示通知之前只需要5秒钟来完成工作)。使用JobIntentService,您没有这些限制。
如果您不想,也不必显示同步通知。但是如果你真的需要这样做,可以在JobIntentService中的onHandleWork()方法中进行。
本文很好地解释了Oreo中新的后台执行限制:
https://medium.com/til-kotlin/jobintentservice-for-background-processing-on-android-o-39535460e060
JobIntentService非常易于使用,可以解决您在新的后台限制中可能遇到的任何问题。将前Oreo中使用的普通IntentService转换为JobIntentService也非常容易。因为它在支持库中,所以它被反向移植到以前的版本。在Oreo及以上版本中,操作系统可以决定何时安排作业(您不必直接使用JobDispatcher),并且将在Oreo之前启动正常的IntentService。该服务通过调用静态帮助程序enqueueWork()方法来启动和处理工作。
请点击此处了解更多详情:
https://developer.android.com/reference/android/support/v4/app/JobIntentService.html