override fun doWork(): Result {
val A = inputData.getInt("A",0)
val B = inputData.getString("B")
val data = Data.Builder()
.putBoolean("C",true)
.putFloat("D",0f)
.build()
outputData = data//返回值
return Worker.Result.SUCCESS
}
doWork要求最后返回一个Result,这个Result是一个枚举,它有几个固定的值:
* FAILURE 任务失败。
* RETRY 遇到暂时性失败,此时可使用WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, long, TimeUnit)来重试。
* SUCCESS 任务成功。
看到这里我就很奇怪,官方不推荐我们使用枚举,但是自己却一直在用,什么意思?
#### 2.2[WorkRequest](
)
也是一个抽象类,可以对Work进行包装,同时装裱上一系列的`约束(Constraints)`,这些Constraints用来向系统指明什么条件下,或者什么时候开始执行任务。
WorkManager向我们提供了WorkRequest的两个子类:
* OneTimeWorkRequest 单次任务。
* PeriodicWorkRequest 周期任务。
val request1 = PeriodicWorkRequestBuilder(60,TimeUnit.SECONDS).build()
val request2 = OneTimeWorkRequestBuilder().build()
从代码中可以看到,我们应该使用不同的构造器来创建对应的WorkRequest。
接下来我们看看都有哪些约束:
* public boolean requiresBatteryNotLow ():执行任务时电池电量不能偏低。
* public boolean requiresCharging ():在设备充电时才能执行任务。
* public boolean requiresDeviceIdle ():设备空闲时才能执行。
* public boolean requiresStorageNotLow ():设备储存空间足够时才能执行。
##### addContentUriTrigger
@RequiresApi(24)
public @NonNull Builder addContentUriTrigger(Uri uri, boolean triggerForDescendants)
指定是否在(Uri指定的)内容更新时执行本次任务(只能用于Api24及以上版本)。瞄了一眼源码发现了一个ContentUriTriggers,这什么东东?
public final class ContentUriTriggers implements Iterable<ContentUriTriggers.Trigger> {
private final Set<Trigger> mTriggers = new HashSet<>();
...
public static final class Trigger {
private final @NonNull Uri mUri;
private final boolean mTriggerForDescendants;
Trigger(@NonNull Uri uri, boolean triggerForDescendants) {
mUri = uri;
mTrigge