##JobScheduler API 允许开发者在某些符合条件的情况下创建执行在后台的任务。
##使用条件:api >=21 即android 5.0以上
使用:
1,创建Job Service
public class JobSchedulerService extends JobService {
@Override
public boolean onStartJob( JobParameters params ) {
return false;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
}
在onStartJob()中返回:
true,则表示任务开始执行;
false表示任务已经执行完毕;
任务执行完毕需要执行jobFinished(JobParameters params, boolean needsRescheduled)来通知系统。
2,创建Handler
private Handler mJobHandler = new Handler( new Handler.Callback() {
@Override
public boolean handleMessage( Message msg ) {
Toast.makeText(getApplicationContext(),"JobService--task--running",Toast.LENGTH_ SHORT ) .show();
jobFinished( (JobParameters) msg.obj, false );
return true;
}
} );
因为Job Service 是运行在主线程的中的,所以需要开子线程,这里使用handler;
handler里面的内容即是‘自定义任务’,这里只弹出一个Toast测试;
不要忘记调用jobFinished( (JobParameters) msg.obj, false );
3,修改JobSchedulerService
@Override
public boolean onStartJob( JobParameters params ) {
mJobHandler.sendMessage( Message.obtain( mJobHandler, 1, params ) );
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
mJobHandler.removeMessages( 1 );
return false;
}
4,在配置文件中注册服务
<service android:name=".JobSchedulerService"android:permission="android.permission.BIND_JOB_SERVICE" />
5,创建JobScheduler对象,并创建任务
public void startJobScheduler(Context context){
JobScheduler mJobScheduler = (JobScheduler)
getSystemService( Context.JOB_SCHEDULER_SERVICE );
JobInfo.Builder builder = new JobInfo.Builder( 1,
new ComponentName( getPackageName(),
JobSchedulerService.class.getName() ) );
builder.setPeriodic( 3000 );
builder.setPersisted( true );
if( mJobScheduler.schedule( builder.build() ) <= 0 ) {
//If something goes wrong
Toast.makeText(context, "StartJob is error", 1).show();
}
}
new ComponentName参数:任务标识符,Service组件的类名;
builder.setPeriodic( 3000 ):每三年一循环;
builder.setPersisted( true ):设备重启,任务继续;
mJobScheduler.schedule( builder.build() ):任务执行成功,返回int,值>0,反之,error