JobScheduler

为了节省电量节省用户流量,需要在充电状态和WiFi时去执行某一后台耗时操作,而service并不能直接支持,需要自己去加入功能监听充电状态的广播和网络状态的广播。加大代码量的同时,也加大了逻辑复杂度,程序变得不易维护。这时可以使用JobScheduler来实现。


工作调度(JobScheduler)

介绍:This is an API for scheduling various types of jobs against the framework that will be executed in your application's own process.

实例化:Context.getSystemService(Context.JOB_SCHEDULER_SERVICE)

常用方法:

schedule(JobInfo job)安排要执行的工作

cancel(int jobId)取消指定的工作

cancelAll()取消全部作业

其他方法:

enqueue(JobInfo job, JobWorkItem work)

getAllPendingJobs()检索调用应用程序调度的所有作业

getPendingJob(int jobId)查看预定作业的描述

工作描述(JobInfo)

介绍:通过内部的Builder类设置任务执行的条件,比如:充电状态,网络状态,空闲状态等。

实例化: JobInfo.Builder().build()

查看全部方法

后台工作(JobService)

介绍:这是处理先前调度的异步请求的基类。重写onStartJob(JobParameters)onStopJob(JobParameters params),这是你实现工作逻辑的地方。

实现:

jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);//获取JobScheduler
JobInfo.Builder builder = new JobInfo.Builder(123, new ComponentName(this, MyJobService.class));
builder.setMinimumLatency(5000);//最小延迟时间
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);//网络类型
builder.setRequiresCharging(true);//需要充电
jobScheduler.schedule(builder.build());//JobInfo加入调度。
 

public class MyJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {//实现工作逻辑,主线程中执行
        Log.e("MyJobService", "onStartJob" + "设备正在充电!"+"ThreadName:"+Thread.currentThread().getName());
        return false;
    }
    @Override
    public boolean onStopJob(JobParameters params) {
        Log.e("MyJobService", "onStopJob");
        return false;
    }
}

另外需要注意在AndroidManifest中注册

<service
    android:name=".service.MyJobService"
    android:permission="android.permission.BIND_JOB_SERVICE" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值