web-dev-qa-db-ja.com

JobIntentServiceがすぐに開始されないAndroid 8.0

古い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");
    }
}
12
Prudhvi

アプリがAPI 25を対象としていますが、OS Android Oで実行されていますか?

はい。 JobIntentServiceの動作— JobSchedulerを使用するかどうか—は、実行しているAndroidのバージョンによって決まります。targetSdkVersionは影響しません。

その場合、Android Oですぐにサービス/ジョブを開始するための回避策はありますか?

JobIntentServiceは使用しないでください。通常のフォアグラウンドサービスを使用します。定義により、JobSchedulerは適切と思われるようにジョブをスケジュールでき、ジョブがすぐに実行される保証はありません。

5
CommonsWare