在Android上的前台启动JobService

时间:2017-10-18 09:37:29

标签: android android-service android-jobscheduler jobservice

我使用com.firebase.jobdispatcher.JobService来同步数据,我是通过使用Job安排FirebaseJobDispatcher启动它。

问题:在我第一次启动应用程序之前,我不喜欢延迟。

有没有一种方法可以在Android O上作为前台服务(带通知)在我第一次使用它时启动服务? (而不是将其安排为工作)

我试过了:

ContextCompat.startForegroundService(context, intent);

但这不会调用JobService的onCreate。

2 个答案:

答案 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