2

我使用 acom.firebase.jobdispatcher.JobService来同步数据,我通过调度Jobusing 来启动它FirebaseJobDispatcher

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

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

我试过:

ContextCompat.startForegroundService(context, intent);

但这不会调用JobService.

4

2 回答 2

3

结论:使用两种服务。

Acom.firebase.jobdispatcher.JobService不能在前台启动。

Service无法按计划启动正常Job

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

于 2018-01-05T09:58:46.597 回答
2

我建议您使用 Oreo 中引入的新 JobIntentService,而不是 FirebaseJobDispatcher。然后你可以从你的应用程序的前台启动一个后台服务(在后台创建的后台服务现在是不允许的,在你必须显示通知之前你只有 5 秒的时间来做事)。使用 JobIntentService,您就没有这些限制。

如果您不想,也不必显示同步通知。但是如果你真的需要这样做,可以在 JobIntentService 的 onHandleWork() 方法中进行。

这篇文章很好地解释了 Oreo 中新的后台执行限制:

https://medium.com/til-kotlin/jobintentservice-for-background-processing-on-android-o-39535460e060

JobIntentService 非常易于使用,可以解决您在新背景限制下可能遇到的任何问题。将 Pre-Oreo 中使用的普通 IntentService 转换为 JobIntentService 也很容易。因为它在支持库中,所以它被向后移植到以前的版本。在 Oreo 及更高版本中,它让操作系统决定何时安排作业(您不必直接使用 JobDispatcher),并且 pre-Oreo 将启动一个正常的 IntentService。该服务通过调用静态帮助程序 enqueueWork() 方法来启动和处理工作。

有关更多详细信息,请参见此处:

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

于 2017-10-18T09:52:26.913 回答