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
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を使用します。
私があなたの質問に答えてくれることを願っています。
よろしく