2015-03-18 13 views
7

mam problemu z pracy scheduleds z JobScheduler w nowym Android API 21. Jest to kod, co mam zaplanować pracę w odstępie 60 sekund jak poniżej:Scheduling Praca z JobScheduler w Androidzie

ComponentName serviceName = new ComponentName(this, MyJobService.class); 
JobInfo jobInfo = new JobInfo.Builder(0, serviceName) 
     .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) 
     .setPeriodic(60000) 
     .build(); 

My tylko JobService wydrukować czas wykonywania w logcat, ale show log że prowadzony serwis w tej chwil:

03-18 08:37:26.334: I/JOB(32662): Wed Mar 18 08:37:26 BRT 2015 
03-18 08:37:56.364: I/JOB(32662): Wed Mar 18 08:37:56 BRT 2015 
03-18 08:39:21.418: I/JOB(32662): Wed Mar 18 08:39:21 BRT 2015 
03-18 08:41:51.670: I/JOB(32662): Wed Mar 18 08:41:51 BRT 2015 
03-18 08:45:52.192: I/JOB(32662): Wed Mar 18 08:45:52 BRT 2015 
03-18 08:54:20.678: I/JOB(32662): Wed Mar 18 08:54:20 BRT 2015 

to dziwne, ponieważ praca powinna wykonać co najmniej 1 raz w ciągu 1 minuty, jak ustawić z setPeriodic (60000) metoda. Ciekawe jest również, w jaki sposób interwał zwiększa się między seriami. W tym momencie jest 18 marca, godz. 18.09, BRT 2015, a Job nie został wykonany więcej.

Jest to problem z interfejsem JobScheduler API? (Używam Nexusa 5 z Androidem 5.0.1)

Odpowiedz

8

Zmiana czasu ma związek z kryteriami wycofania w celu ponowienia zadań. Domyślnie jest ustawiony na wykładniczy. Zgaduję, że również nie poprawnie kończysz swoją pracę, gdy skończysz, dzwoniąc pod numer jobFinished(JobParameters params, boolean needsReschedule).

Napisałem blog post, który skupia się na "wszystkich drobiazgach za pomocą JobSchedulera. Gorąco polecam przeczytanie tego.

3

miałem ten sam problem i myślę, że może być połączony z wewnętrznymi wymaganiami klasy JobInfo:

/* Minimum interval for a periodic job, in milliseconds. */ 
private static final long MIN_PERIOD_MILLIS = 15 * 60 * 1000L; // 15 minutes 

Wygląda JobInfo nie pozwoli Ci umieścić odstęp mniejszy niż.