web-dev-qa-db-ja.com

JobIntentServiceとWorkManagerを使用する場合

Googleは最近、IntentServiceを廃止しました: https://Android.googlesource.com/platform/frameworks/base.git/+/6f8b09029932dfd24945202017639754b00acc2e

IntentServiceのドキュメントは今言う:

 * @deprecated IntentService is subject to all the
 *   <a href="/preview/features/background.html">background execution limits</a>
 *   imposed with Android 8.0 (API level 26). Consider using {@link androidx.work.WorkManager}
 *   or {@link androidx.core.app.JobIntentService}, which uses jobs
 *   instead of services when running on Android 8.0 or higher.

それでは、JobIntentServiceとWorkManagerの違いは何で、どの状況でどの方法が推奨されますか?

GoogleはこのページでJobIntentServiceについても言及せず、WorkManagerについてのみ言及しています。 https://developer.Android.com/guide/background

4
satur9nine

Android Oreoなので、通常のサービスをバックグラウンドで実行し続けることはできません。システムが次のようになるためです。

アプリ自体がサービスの起動後にバックグラウンドに移行した場合、約1分後にサービスを1キルします

アプリ自体がバックグラウンドにあるときにサービスが起動された場合、2例外をスローします

IntentServiceは通常のサービスのサブクラスにすぎず、バックグラウンドスレッドですべての作業を順次実行し、すべての作業の実行が終了すると停止します。ただし、サービスとしては、上記の制限の影響も受けます。

JobIntentServiceの場合:

Oreo以前のデバイスでは通常のIntentServiceとして機能し(制限がないため)、Oreo +では代わりにjobSchedulerを使用して、IntentServiceと同様の動作を実現します。 それはできるだけ早く作業を開始するだけです、JobSchedulerを介してその作業をスケジュールし、JobSchedulerはpostponeを選択するかもしれませんが、その作業はより可能性が高いです低メモリ状況で、居眠りモードで、または制限時間(〜10分)に達したときに、差異または中断された

JobIntentServiceでは、一部の構成はimpossibleです。たとえば、ジョブを開始する状況(デバイスが現在充電中の場合、またはWIFI接続がある場合など)を具体的に定義する場合と同様ですが、ワークマネージャーでは- canこれらの制約を設定します。

一部の制約があるジョブ、またはトランザクション型のジョブ/作業進行中でない、または発生する可能性のあるジョブ将来のある時点にはWorkManagerを使用します=、およびAndroid Oreo +で、通常のIntentServiceの動作をコピーする場合、およびわずかに遅延する可能性があり、約1分以上10分未満かかる可能性があるジョブの場合は、JobIntentServiceを使用します。

私があなたの質問に答えてくれることを願っています。

よろしく

7
Hady Salhab