タイトル通りです.
サンプル
例えば,
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ComponentName mServiceName;
private final static int JOB_ID = 0x01;
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistableBundle) {
super.onCreate(savedInstanceState, persistableBundle);
setContentView(R.layout.activity_main);
mServiceName = new ComponentName(this, MyJobService.class);
Intent intent = new Intent(this, MyobService.class);
startService(intent);
JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo jobInfo = new JobInfo.Builder(JOB_ID, mServiceName)
.setPeriodic(10000)
.build();
scheduler.schedule(jobInfo);
}
という感じでJobInfo.Builder
でsetPeriodic
関数を使って,10秒後にJobが実行されるように設定すると,Logcatに
W/JobInfo: Specified interval for 1 is +10s0ms. Clamped to +15m0s0ms
W/JobInfo: Specified flex for 1 is +10s0ms. Clamped to +5m0s0ms
と出てきて,勝手にintervalを15分・flexを5分にされてしまう.
# が,手元で試したら秒の単位でちょうど10分後に発火しました.
# まぁinterval ± flexなんでしょう.
感想
酷いのは,[公式のリファレンス](https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setPeriodic(long, long))に何も書いてくれていないということですな..
今回に限っては本番では15分以上にしてもいいんやけど,いかんせんデバッグがしにくいというか,ちょっと動くか試したいときに面倒すぎる.
下記参考の2では,毎回Jobが終わるたびに同じJobIDでsetMinimumLatency
のJobを作りなおすことで,15分以下のPeriodicなJobを無理やり作ってるけど感覚的にはちょっと気持ち悪いしなぁ..