JobService是Android L版本加入的组件,JobService是继承自Service的抽象类,为Service的加强和优化.
由系统统一管理和调度,在特定场景下(网络状态等等)使用JobService更加灵活和省心。
可以在应用退出后,重新启动应用后,系统将PersistableBundle数据回调到JobService对原来的事务进行处理。
JobService是JobScheduler的回调,是Job请求的实际处理类。
需要覆写onStartJob(JobParameters)方法,并实现实际的任务逻辑。
因为JobService的执行是在APP的主线程里响应的, 所以必须提供额外的异步逻辑去执行这些任务。
//Job开始的时候的回调,实现具体的业务。
//如果返回false的话,系统会结束该job;
onStartJob()
//Job的任务执行完毕后,APP端主动调用,用以通知JobScheduler已经完成了任务。
//该方法执行完后会回调onDestroy()
jobFinished()
//停止该Job。当JobScheduler检测Job条件不满足的时候,或者job被抢占被取消的时候的强制回调。
//如果想在这种意外的情况下让Job重新开始,返回值设置为true。
onStopJob()
JobService是实际的执行和停止任务的回调入口。 JobScheduler对JobInfo进行管理。
JobScheduler为系统的服务,类似AMS,WMS之类.
1. 类似启动Servcie方式,启动自定义的JobService
Intent startServiceIntent = new Intent(mContext, JzgkJobService.class);
mContext.startService(startServiceIntent);
2. 创建JobInfo,并通过JobScheduler加入到系统管理的服务中
//JobInfo 指定到对应的JobService组件中,并附上对应的JobId
JobInfo.Builder builder = new JobInfo.Builder(++mJobId, startServiceIntent);
//特定条件下执行, 例如此处为任意网络环境
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
// Extras, work duration.
//创建持久化数据存储
PersistableBundle extras = new PersistableBundle();
builder.setExtras(extras);
//加入到系统管理的服务中
mJobScheduler.schedule(builder.build());
3. JobService onStartJob实现
@Override
public boolean onStartJob(JobParameters params) {
//获取持久化数据
PersistableBundle persistableBundle = params.getExtras();
//业务处理
}