Service
とIntentService
の場合、主な違いはService
がメインスレッドで実行されるのに対し、IntentService
は実行されず、後者は、 stopService()
またはstopSelf()
を呼び出してService
を停止します。
これらはどちらも単純にstartService()
に渡すことができます。
JobService
とJobIntentService
はどうですか?
次のコードスニペットを見てみましょう。
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
は、JobService
とJobIntentService
の両方を参照しますか?
動作はService
およびIntentService
と同じですか(JobScheduler
を除いて、ジョブがすぐに開始されない場合があります)?
JobIntentService
は基本的にIntentService
の代替品であり、Android Oの新しいバックグラウンド実行制限を使用して「うまくいく」ように同様のセマンティクスを提供します。これは次のように実装されます。 O +でスケジュールされたジョブですが、抽象化されています。アプリは、それがジョブであることを気にする必要はありません。
JobIntentService
サポートクラスを介して使用する予定のジョブを直接schedule()
しないでください。 JobIntentService
は、ジョブスケジューラのenqueue()
システムを使用します。同じジョブに対してenqueue()
とschedule()
を組み合わせて使用することはできません。
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を介してジョブとしてディスパッチされます。
実際には、JobIntentServiceの名前をJobedIntendServiceに変更すると、一見するとJobServiceでわかりにくくなります。