web-dev-qa-db-ja.com

JobIntentServiceはJobServiceとどのように関連していますか?

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の両方を参照しますか?

動作はServiceおよびIntentServiceと同じですか(JobSchedulerを除いて、ジョブがすぐに開始されない場合があります)?

19
justanoob

JobIntentServiceは基本的にIntentServiceの代替品であり、Android Oの新しいバックグラウンド実行制限を使用して「うまくいく」ように同様のセマンティクスを提供します。これは次のように実装されます。 O +でスケジュールされたジョブですが、抽象化されています。アプリは、それがジョブであることを気にする必要はありません。

JobIntentServiceサポートクラスを介して使用する予定のジョブを直接schedule()しないでください。 JobIntentServiceは、ジョブスケジューラのenqueue()システムを使用します。同じジョブに対してenqueue()schedule()を組み合わせて使用​​することはできません。

8
ctate

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を介してジョブとしてディスパッチされます。

8

実際には、JobIntentServiceの名前をJobedIntendServiceに変更すると、一見するとJobServiceでわかりにくくなります。

0
user1611552