2016-06-14 122 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