JSS 第 1 篇
来源:互联网 发布:access数据库表的关联 编辑:程序博客网 时间:2024/05/29 04:46
概述
对于满足网络、电量、时间等一定预定条件而触发的任务,那么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!详情,请看第二篇!
0 0
- JSS 第 1 篇
- JSS 第 3 篇
- JSS 第 2 篇
- JSS 第 4 篇
- JSS 第 5 篇
- jss
- jss
- jss
- jss
- JSS installation instructions for macOS
- 采用imagecropper.jss+canvas实现裁剪后多尺寸的图像预览
- 第1篇
- 第1篇 安装
- 第1篇 概述
- ruby 项目部署到服务器时,配置文件(jss,css..)改变,需要执行一个命令
- 【鸟哥 linux 基础篇】 第1章 - 第5章
- 【Gabbing Delva 第1篇】
- 第1篇 封装集合
- 推荐一种眼睛舒服的VS环境配置
- VS 2015 C++预处理器 scanf() 使用出错问题
- java.util.ConcurrentModificationException
- 洛谷P1168 中位数
- gradle 编译忽略警告
- JSS 第 1 篇
- 欢迎使用CSDN-markdown编辑器
- AndroidStudio中AAR/JAR的生成以及使用
- Ubuntu16.04 配置tensorflow1.0 gpu版本
- Android原生WebView与网页js相互调用
- 提示413 Request Entity Too Large 的解决方法
- Hibernate学习笔记之基础知识
- 经常被问到的有深度有内涵的数据结构面试题
- Hrbust 2160 Hunter【最短路SFPA+状压dp】好题!