WorkManager详解,【面试总结】

本文详细介绍了WorkManager的工作原理,包括PeriodicWorkRequest和OneTimeWorkRequest的创建,约束条件的设置如设备空闲、充电状态和网络要求。同时讲解了如何使用ContentUriTrigger监听内容Uri变化,并探讨了WorkRequest的取消、状态查询和多任务执行策略,如串行和并行执行。此外,还涵盖了WorkManager在面试中的重要知识点。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值