android 中 JobScheduler的简单使用

大家知道,android8.0对后台service限制很严格,官方推荐使用AlarmManager、SyncAdapter、JobScheduler代替后台服务,这里我们说一说JobScheduler的简单使用。

首先创建一个Jobservice:

public class MyJobService extends JobService {

    public static String TAG = "MyJobService";
    Context mContext;
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    public boolean onStartJob(final JobParameters params) {
        Log.d(TAG, "onStartJob ");
        new Thread(new Runnable() {     // JobService默认在主线程中执行,如果操作耗时任务,需要启用新线程执行
            @Override
            public void run() {
                // 具体业务逻辑代码
                Log.d(TAG, "onStartJob  run() ");
                try {
                    Thread.sleep(3000);
                    jobFinished(params,false);    // 如果onStartJob返回true的话需要调用此方法表示任务执行完毕
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        return true;       // 返回false表示任务执行完毕,下一个任务即将展开,true表示任务还未执行结束,需要手动调用jobFinished;
    }

    @Override
    public boolean onStopJob(JobParameters params) {  //在onStartJob()返回true的前提下, 取消cancel或者强制停止Job任务的时候才会调用到此方法
        Log.d(TAG, "onStopJob");
        return false;       // 任务是否应该在下次继续
    }
}

其次需要在manifest中申明权限:

<service
            android:name=".ui.AlarmCheckJobService"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />   // 很重要!!!!

然后创建JobScheduler:

ComponentName jobService = new ComponentName(this, AlarmCheckJobService.class);
JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);

最后创建Job,开启任务

JobInfo.Builder builder = new JobInfo.Builder(1, jobService);
JobInfo jobInfo = builder
                .setPeriodic(15 * 60 * 1000)       // 每隔15分钟运行一次
                .setMinimumLatency(0)              // 设置任务运行最少延迟时间
                .setOverrideDeadline(60000)        // 设置deadline,若到期还没有达到规定的条件也会开始执行
                .setPersisted(true)                // 设备重新启动之后你的任务是否还要继续运行
                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) // 设置网络条件(不是蜂窝网络( 比方在WIFI连接时 )时任务才会被运行)
                .setRequiresCharging(true)         // 设置是否充电的条件
                .setRequiresDeviceIdle(false)      // 设置手机是否空闲的条件
                .setRequiresCharging(true)         // 这种方法告诉你的应用,仅仅有当设备在充电时这个任务才会被运行。
                .setRequiresDeviceIdle(true)       //这种方法告诉你的任务仅仅有当用户没有在使用该设备且有一段时间没有使用时才会启动该任务。
                .build();
scheduler.schedule(jobInfo);

以上就是JobService的简单使用,不对的地方欢迎指正出来,一起交流共同进步!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值