古いAndroidデバイス(pre Android O)で正常に機能するバックグラウンドタスクを実行するためにJobIntentService
を実装しました。意図はAndroid OデバイスではJobIntentService.onHandleWork()
が実行される前に多少の遅延があります。インテントは連続的に処理されることを理解していますが、処理されているインテントがない場合でも遅延が発生します。 Android O?
ここ 、Androidドキュメントは言う
「O前のサービスとして実行している場合、通常、デバイスが居眠り状態にあるか他の状態にあるかに関係なく、作業をキューに入れる動作はすぐにサービスを開始します。ジョブとして実行する場合、ジョブの標準のJobSchedulerポリシーに従います。
setOverrideDeadline(long)
が0のジョブ:デバイスが居眠りしている間はジョブは実行されません。デバイスがジョブを実行する要求が多く、メモリの負荷が高い場合、サービスよりも遅れる可能性があります。」
アプリがAPI 25を対象としていますが、OSで実行している場合でも上記のステートメントは有効ですかAndroid O?その場合、Android O?
私の現在の実装:
public class MySampleService extends JobIntentService {
private static final int JOB_ID = 1000;
public MySampleService() {
}
/**
* Convenience method for enqueuing work in to this service.
*/
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, MySampleService.class, JOB_ID, work);
}
/**
* Interpret the incoming intent actions and handle it appropriately.
* @param workIntent
*/
@Override
protected void onHandleWork(@NonNull Intent workIntent) {
if(workIntent==null || workIntent.getAction() == null){
return;
}
/* This gets printed immediately on pre Android O devices but not otherwise*/
System.out.println("Intent Handled");
}
}
アプリがAPI 25を対象としていますが、OS Android Oで実行されていますか?
はい。 JobIntentService
の動作— JobScheduler
を使用するかどうか—は、実行しているAndroidのバージョンによって決まります。targetSdkVersion
は影響しません。
その場合、Android Oですぐにサービス/ジョブを開始するための回避策はありますか?
JobIntentService
は使用しないでください。通常のフォアグラウンドサービスを使用します。定義により、JobScheduler
は適切と思われるようにジョブをスケジュールでき、ジョブがすぐに実行される保証はありません。