2016-06-14 10 views
1

JobSchedulerで実行するジョブをスケジュールすると、初めてジョブを開始する前に少なくとも10分以上の遅延があるように見えます。なぜ誰が知っていますか?今日はコードを掘り起こし始めましたが、その理由は見つかりませんでした。私はまだ見ているが、私は頼むと思った。JobSchedulerがジョブを初めて実行するまでの遅延?

public class MainActivity extends AppCompatActivity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 


      Log.d("XXX", "Scheduling MyJobService to run."); 
      ComponentName serviceName = new ComponentName(this, MyJobService.class); 
      JobInfo job = new JobInfo.Builder(MyJobService.JOB_ID, serviceName) 
        .setBackoffCriteria(TimeUnit.SECONDS.toMillis(30), JobInfo.BACKOFF_POLICY_LINEAR) 
        .setPeriodic(TimeUnit.SECONDS.toMillis(5)) 
        .build(); 
      JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); 
      scheduler.cancel(MyJobService.JOB_ID); 
      scheduler.schedule(job); 
     } 
    } 

    public class MyJobService extends JobService { 

     public final static int JOB_ID = 1000; 

     @Override 
     public boolean onStartJob(JobParameters params) { 
      Log.d("XXX", "Job started"); 
      jobFinished(params, true); 
      return true; 
     } 

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

私のテストアプリケーションを2回再起動したときの出力です。

06-14 16:53:00.335 29024-29024/com.example.jobschedulertest.jobschedulertest D/XXX: Scheduling MyJobService to run. 
06-14 17:03:17.173 29024-29024/com.example.jobschedulertest.jobschedulertest D/XXX: Job started 
06-14 17:12:05.158 31668-31668/com.example.jobschedulertest.jobschedulertest D/XXX: Scheduling MyJobService to run. 
06-14 17:22:07.280 31668-31668/com.example.jobschedulertest.jobschedulertest D/XXX: Job started 

私はこれは、彼らが私はだろうと確信してコードを離すとAndroidのN.で追加された何かであると考えていネクサス6

+0

ピュアあなたは、このための完璧なソリューションを取得しましたか? –

+0

私はそれがドーズの最適化に起因すると信じているので、解決策はありません。 – TALE

答えて

0

でAndroid Nのプレビューリリース4を実行していますよ遅延を引き起こしているものを見ることができます。最も可能性が高いのは、「Doze」最適化によるものです。

Nexus 6pとMoto X Pure(両方ともMarshmallowを実行中)でテストしました。どちらのデバイスもほぼ即座にジョブを実行しました。モトXからネクサス6P

06-16 14:55:03.045 13459-13459/com.example.jobschedulertest.jobschedulertest D/XXX: Scheduling MyJobService to run. 
06-16 14:55:08.069 13459-13459/com.example.jobschedulertest.jobschedulertest D/XXX: Job started 

から

06-16 14:55:03.045 13459-13459/com.example.jobschedulertest.jobschedulertest D/XXX: Scheduling MyJobService to run. 
06-16 14:55:08.069 13459-13459/com.example.jobschedulertest.jobschedulertest D/XXX: Job started 
06-16 14:52:19.315 19812-19812/com.example.jobschedulertest.jobschedulertest D/XXX: Scheduling MyJobService to run. 
06-16 14:52:24.342 19812-19812/com.example.jobschedulertest.jobschedulertest D/XXX: Job started 
06-16 14:52:56.480 19812-19812/com.example.jobschedulertest.jobschedulertest D/XXX: Job started 
関連する問題