清单文件:
<service android:name=".TestService" android:permission="android.permission.BIND_JOB_SERVICE"/>
TestService如下:
public class TestService extends JobService {
private static final String TAG = "TestService";
@Override
public boolean onStartJob(JobParameters params) {
Log.i(TAG,"onStartJob");
return false;
}
@Override
public void onCreate() {
Log.i(TAG,"onCreate");
super.onCreate();
}
@Override
public boolean onStopJob(JobParameters params) {
Log.i(TAG,"onStopJob");
return false;
}
}
调用代码:
JobScheduler js =
(JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo job1 = new JobInfo.Builder(
0,
new ComponentName(this, TestService.class))
.setPeriodic(3000)
.build();
js.schedule(job1);
理论上应该三秒执行一次,然而不是这样
这个问题stackoverflow上有人提。
https://stackoverflow.com/questions/49832467/android-setperiodic-for-jobscheduler-wont-work
---------
I think your problem is the frequency you would like to execute your job. The minimum period for a job is 15 minutes in the standard AOSP. So it probably isn't the right API for you. Alarm Manager would probably be what you want, but setting an alarm for every 5 seconds is expensive. Google has also been restricting background services more and more with each release. Just something to keep in mind.
查看android 26 的JobInfo.java源码 ,里面有:
/* Minimum interval for a periodic job, in milliseconds. */
private static final long MIN_PERIOD_MILLIS = 15 * 60 * 1000L; // 15 minutes
然而 android-21里面却没有这行代码
-----------------------------------------
果然不同apilevel JobScheduler的行为不一样啊