JobScheduler任务分发器,将Service和常见BroadcastReceiver结合,可以实现简单的调用
使用方法主要用到3个类
JobInfo任务概要信息,主要封装有该任务的触发条件
JobService 继承自Service,用来处理任务的
JobScheduler任务调度,主要是启动服务,处理触发回调
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public class MyJobScheduler extends JobService { @Override public boolean onStartJob(JobParameters params) { System.out.println("job start to perform"); //return true 表示任务执行完毕,返回true表示需要开发者自己调用jobFinish()结束任务 return false; } @Override public boolean onStopJob(JobParameters params) { System.out.println("job finished"); return false; } }
int jobId = 1; JobInfo.Builder builder = new JobInfo.Builder(jobId , new ComponentName(getPackageName(), MyJobScheduler.class.getName())); builder.setMinimumLatency(5000); //任务至少延迟多少毫秒后执行 builder.setOverrideDeadline(30000); //任务至多延迟多少毫秒后执行 //builder.setPeriodic(3000); //任务周期性执行 该方法不能喝上面两个方法连用 //JobInfo.NETWORK_TYPE_NONE(无网络时执行,默认)、 //JobInfo.NETWORK_TYPE_ANY(有网络时执行)、 //JobInfo.NETWORK_TYPE_UNMETERED(网络无需付费时执行) builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); //设置任务执行的网络环境 //builder.setRequiresDeviceIdle(true); //设置是否在cpu空闲时执行 //builder.setRequiresCharging(true); //社会是否在充电时执行 //RECEIVE_BOOT_COMPLETED权限与开机启动有关,有了该权限之后可以监听到开机启动的广播,可以让app随开机启动而启动 //虽然可以开机启动,但是会导致手机开机慢,而且系统会将开机启动的应用放在一个列表中,供用户自己处理 //builder.setPersisted(true); //重启后是否还要继续执行,需要声明权限RECEIVE_BOOT_COMPLETED JobScheduler js = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE); js.schedule(builder.build()); <service android:name=".ui.androidbasic.MyJobScheduler" android:permission="android.permission.BIND_JOB_SERVICE"/>