Android 在前台启动 JobService

Start JobService in foreground on Android

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

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

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

我试过了:

ContextCompat.startForegroundService(context, intent);

但这并没有调用JobService的onCreate。

我建议您使用 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 及更高版本中,它让 OS 决定何时安排作业(您不必直接使用 JobDispatcher),并且在 Oreo 之前将启动一个普通的 IntentService。该服务通过调用静态帮助程序 enqueueWork() 方法启动和处理工作。

详情请看这里:

https://developer.android.com/reference/android/support/v4/app/JobIntentService.html

结论:使用两个服务。

A com.firebase.jobdispatcher.JobService 无法在前台启动。

正常 Service 无法按计划启动 Job

我创建了两个启动相同同步流的服务 类:已修复。