JSS 第 1 篇 - JobSchedulerService 概述

基于 Android 7.1.1 源码分析,本文为原创。

概述

对于满足网络、电量、时间等一定预定条件而触发的任务,那么jobScheduler便是绝佳选择。JobScheduler主要用于在未来某个时间下满足一定条件时触发执行某项任务的情况,那么可以创建一个JobService的子类,重写其onStartJob()方法来实现这个功能。

JobScheduler的schedule过程:

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

JobInfo jobInfo = new JobInfo.Builder(123, jobService) // 任务Id等于123
     .setMinimumLatency(5000)// 任务最少延迟时间  
     .setOverrideDeadline(60000)// 任务deadline,当到期没达到指定条件也会开始执行  
     .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)// 网络条件,默认值NETWORK_TYPE_NONE
     .setRequiresCharging(true)// 是否充电  
     .setRequiresDeviceIdle(false)// 设备是否空闲 
     .setPersisted(true) // 设备重启后是否继续执行
     .setBackoffCriteria(3000,JobInfo.BACKOFF_POLICY_LINEAR) // 设置退避/重试策略
     .build();  
 scheduler.schedule(jobInfo); 

JobScheduler 的 cancel 过程:

scheduler.cancel(123); // 取消jobId=123的任务
scheduler.cancelAll(); // 取消当前uid下的所有任务

可以看到,JobScheduler 这个类只是一个客户端的代理类,代码位于:
frameworks/base/core/java/android/app/job/JobScheduler.java

1 JobScheduler

package android.app.job;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import java.util.List;

public abstract class JobScheduler {

// 调用 schedule 方法返回的结果码
public static final int RESULT_FAILURE = 0;
public static final int RESULT_SUCCESS = 1;

// 注册一个任务到系统中!
public abstract int schedule(JobInfo job);

@SystemApi
public abstract int scheduleAsPackage(JobInfo job, String packageName, int userId, String tag);
// 取消该 package 设置的 ID 为 iobId 的任务!
public abstract void cancel(int jobId);
// 取消该 package 设置的所有 Job!
public abstract void cancelAll();

public abstract @NonNull List<JobInfo> getAllPendingJobs();

public abstract @Nullable JobInfo getPendingJob(int jobId);
}

上面是应用中调用的 JobScheduler 对象,他是一个抽象类;
实际上,我们获得的是服务端的代理对象:JobSchedulerStub 对象,他继承了 IJobScheduler.Stub!详情,请看第二篇!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,870评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,841评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • 张华和小意是同村的孩子,张华高大帅气 小意普普通通,但是她在我们村是个孝顺的孩子,他们从一年级一直到五年级都...
    请叫我美人阅读 578评论 0 0
  • ***if***
    谢小顿阅读 152评论 0 0