EnqueueWork 不会在 Oreo 及更高版本上立即启动

EnqueueWork doesn't start immediately on Oreo and above

在我的 SDK 中,我使用 JobIntentService 在后台做一些工作。我注意到当我调用 enquequeWork() 时作业并没有立即开始,而是在一段时间后开始。我 不能 使用 foreground service 来完成这项工作,因为该应用程序不能 运行 根据客户的要求作为前台。 在 enqueueWork() 被调用后,有没有其他方法可以强制完成工作? 我还使用 WorkManagerPeriodicWorkRequest 检查工作是否可以完成,每 X 分钟一次,如果可以,我调用 JobIntentService 并将我需要的工作排队。

Is there any other way I can force the job to be done immediately after enqueueWork() is called?

没有。 JobIntentService 使用 JobSchedulerJobScheduler 在它决定时运行作业。

I also use WorkManager's PeriodicWorkRequest to check if the work can be done, every X minutes and if so, I call for the JobIntentService and enqueue the work I need.

如果 JobIntentService 的唯一供应商是这个 Worker,您可以考虑简化您的代码并只在您的 Worker 中完成您的工作。或者,让您的 WorkerJobIntentService 可以使用的 class 执行实际的 "work"。正如 JobIntentService 使用 JobSchedulerWorkManager 也是如此。您当前的系统似乎有一个作业会触发另一个作业,您可以通过合并这些作业来减少延迟。