2016-06-14 43 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; 
     } 
    } 

这里是我重新启动我的测试应用两次的输出。

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 

我在Nexus 6

+0

你得到这个一个完美的解决方案?即使我面临同样的问题 –

+0

我相信这是由于打盹优化,所以没有解决方案。 – TALE

回答

0

我相信这是在Android的N.加入当他们释放我敢肯定,我会是什么代码运行Androidň预览版4能够看到是什么造成了延迟。很可能是由于“打盹”优化。

我使用Nexus 6p和Moto X Pure进行测试,均运行Marshmallow。这两款设备几乎可以即时完成任务。

从Nexus的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