2017-08-31 14 views
0

こんにちは私は最近までうまく動作していたAndroid JobScheduler APIを実装しましたが、2/3日以降に予定されているジョブに矛盾した動作があるようです。ここでAndroid JobScheduler JobService not working

はJOBINFOビルダーの設定です:

jobInfo = new JobInfo.Builder(118, new ComponentName(this, LocationJob.class)) .setBackoffCriteria(30000, JobInfo.BACKOFF_POLICY_EXPONENTIAL) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setExtras(persistableBundle).build();

jobScheduler.schedule(jobInfo);

私はこれをトリガーする際の基本的な作業は、それがすぐにジョブサービスクラスを開始するために使用されているが、それはすぐに開始されていません今。

マイJobServiceクラス:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
public class LocationJob extends JobService { 

    private static final String LOG_TAG = LocationJob.class.getSimpleName(); 

@Override 
public boolean onStartJob(final JobParameters params) { 

    try { 
     /* doing some server work in another thread. */ 
    } catch (Exception e) { 
     Log.v(LOG_TAG, e.toString() + " " + e.getMessage() + " " + e 
       .getCause()); 
    } 

    return true; 
} 

@Override 
public boolean onStopJob(JobParameters params) { 
    return false; 
} 
} 

私JobServiceはこれです行動がどんなものなのか、すぐにトリガされていませんか?

答えて

0

これは正常な動作です。それは、 "(近い)将来のどこか"に始まります。それは私のアプリでも同じです。ときどきすぐに、必ずしもそうではありません。

また、NETWORK_TYPE_ANYのような要件は、現在のところネットワークが存在しない場合に延期する可能性があります。

文書から:通常、ジョブの期限を指定しない場合、JobSchedulerの内部キューの現在の状態に応じていつでも実行できますが、次回はデバイスが電源に接続されています。 https://developer.android.com/reference/android/app/job/JobScheduler.html

+0

私はあなたの意見を持っていましたが、それが予定されたらただちにトリガすることがありました。 JobSchedulerの内部キュー・サイズはありますか?もしそうなら、私はそれに応じてスケジュールを取ることができないので、最大カウントです。そして、NETWORK_TYPE_ANYは、ジョブをできるだけ早くスケジュールするネットワーク接続があれば何でも言います。それが正しい方法です。 –

+0

はい、あなたはネットワークを持っていないかもしれません。すぐにスケジューリングしていたのは、古いバージョンの非効率性です。それは今、多分待っているかもしれないので、それは異なるアプリや何かからいくつかのジョブをバッチすることができます。 – Frank

+0

私はネットワークに接続していますが、私はMashmallow(6.0)で実行しています –