JobIntentService如何与JobService相关?

时间:2017-09-21 06:33:14

标签: android android-jobscheduler

如果ServiceIntentService主要差异是Service在主要线程上运行,而IntentService则没有,后者在工作完成后自行完成我们必须致电stopService()stopSelf()来停止Service

这两个都可以简单地传递给startService()

JobServiceJobIntentService呢?

我们采取以下代码段:

JobInfo job = new JobInfo.Builder(id, new ComponentName(context, ExampleJobService.class))
    .build();

JobScheduler scheduler = (JobScheduler) context
    .getSystemService(Context.JOB_SCHEDULER_SERVICE);

scheduler.schedule(job);

ExampleJobService.class可以同时引用JobServiceJobIntentService吗?

行为是否与ServiceIntentService相同(除了JobScheduler可能无法立即启动作业)?

3 个答案:

答案 0 :(得分:8)

JobIntentService本质上是IntentService的替代品,以与Android O的新后台执行限制“玩得很好”的方式提供类似的语义。它被实现为O +上的预定作业,但这已被抽象出来 - 您的应用程序不需要关心它是一项工作。

永远schedule()您希望通过JobIntentService支持类直接使用JobIntentService作业。 enqueue()使用作业计划程序中的enqueue()系统,您无法将schedule()std::unique混合并匹配到同一作业。

答案 1 :(得分:8)

JobService用于安排JobScheduler的后台工作。以上ExampleJobService.class的代码段可用于启动JobService。

在哪里,可以使用以下代码启动JobIntentService:

// JobIntentService for background task
Intent i = new Intent(context, ExampleJobIntentService.class);
ExampleJobIntentService.enqueueWork(context,i);

JobIntentService能够在Android Oreo设备之前和之后工作。

在Oreo版本的平台上运行时,JobIntentService将使用Context.startService。  在Android O或更高版本上运行时,工作将通过JobScheduler.enqueue作为作业分派。

答案 2 :(得分:0)

实际上,如果重命名为JobedIntendService,JobIntentService会更好,因为乍一看,JobService会让他们迷惑不解。