2017-08-17 6 views
0

ジョブが所定の時間に起動していません...遅延...遅延...遅延時間が長くなります。私の要件は、Android 7.0以降のJob Schedulerを使用して10分ごとに何をしてもジョブを実行することです。 は、ここに私のコードスニペットジョブスケジューラAndroid 7.0(Nougat)で周期的に繰り返されない

private static long Scheduler_Interval = 5 * DateUtils.MINUTE_IN_MILLIS; 

JobScheduler mJobScheduler mJobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); 

      JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(getPackageName(), JobSchedulerService.class.getName())); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
       builder.setPeriodic(Scheduler_Interval, 1 * DateUtils.MINUTE_IN_MILLIS); 
      } 
      builder.setRequiresDeviceIdle(false); 

      if (mJobScheduler.schedule(builder.build()) <= 0) { 
       ShowToast("Some error while scheduling the job"); 
      } 


public class JobSchedulerService extends JobService { 
@Override 
    public boolean onStartJob(JobParameters jobParameters) { 
     writeToTestLogFile(GetSavedDateFromLocationProvider()+ "|onStartJob"); 
     return false; 
    } 

    @Override 
    public boolean onStopJob(JobParameters jobParameters) { 
     writeToTestLogFile(GetSavedDateFromLocationProvider()+ "|onStopJob"); 
    return false; 
    } 

} 
+0

を設定するのAndroid 6.0以上のDozeモードではアンドロイド7.0 –

+1

でこの機能を実現するために他の方法があり、あなたが何かを行うことができる唯一の方法は、これはユーザーがあなたを追加し、頻繁にされている場合アプリをバッテリー最適化ホワイトリストに追加します。すべてのユーザーがこれを行うわけではありません。 – CommonsWare

+0

@CommonsWare 6.0では正常に動作しますが、7.0ではそれがありません –

答えて

0

jobschedulerのは、AndroidのOSによって最適化され、そのためのあなたの仕事は、あなたが指定した正確な間隔で実行されませんでした。

このジョブを指定した間隔で繰り返すように指定します。期間ごとに1回以下を指定します。この間隔内でこのジョブがいつ実行されるかを制御することはできません。この間隔内に最大で1回だけ実行されるという保証があります。アンドロイドN(ヌガー)最小周期間隔で

https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setPeriodic(long)

+0

Android 7.0でこの機能を実現する他の方法はありますか? –

+0

私は完全にはわかりませんが、AlarmManagerを使って正確に登録することができますinterval – Piwo

+0

アラームマネージャはディープスリープモードでも動作していません...アラームマネージャではなくAndroid 7.0では、ジョブスケジューラがあります。https://developer.android.com/about/versions/nougat/android-7.0-changes .html –

0

15分です。間隔を15分に設定すると、コードが機能します。

jobFinished(parameters, false); 
関連する問題