android Jetpack应用实战(五)-WorkManager

WorkManager是一个处理后台任务的库,确保任务在设备重启或应用退出后仍能执行。它适用于非实时需求的工作,如日志上传、图片处理和数据同步。使用包括添加依赖、定义工作类、创建WorkRequest(一次性或周期性),并设置执行约束,如网络、电池和存储条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WorkManager 有什么作用?

官网的一段话:

用于处理既需要机会性执行,又需要有保证的执行的后台工作。机会性执行意味着 WorkManager 会尽快执行您的后台工作。有保证的执行意味着 WorkManager 会负责通过逻辑保障在各种情况下启动您的工作,即使用户离开您的应用也无妨。

总结一段话:任务会执行,无论什么情况(设备重启,应用退出),一定会执行,但是什么时候执行看心情....

应用场景

  • 上传日志
  • 对图片应用滤镜并保存图片
  • 定期将本地数据与网络同步

这些都是不需要实时要求的,就是不着急的,任务在处理就行,能完成就行...

如何使用

1,添加gradle

    def work_version = "2.8.0"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"

2,定义工作

public class UploadLog extends Worker {
    public UploadLog(
            @NonNull Context context,
            @NonNull WorkerParameters params) {
        super(context, params);
    }

    @Override
    public Result doWork() {

        // Do the work here--in this case, upload the images.
       // uploadImages();
        Log.e("UploadLog",new Date().toString());
        // Indicate whether the work finished successfully with the Result
        return Result.success();
    }
}

3,创建 WorkRequest

这个有几种不同的类型:

        a,OneTimeWorkRequest 一次性执行的任务,即只执行一次

WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .setExpedited(OutOfQuotaPolicy.DROP_WORK_REQUEST). .setInitialDelay(10,TimeUnit.MINUTES)  .build();
setInitialDelay 可延迟执行

OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST,这会导致作业作为普通工作请求运行。上述代码段演示了此操作。
OutOfQuotaPolicy.DROP_WORK_REQUEST,这会在配额不足时导致请求取消。

        b,PeriodicWorkRequest 间隔多长时间,然后周期执行

    Constraints constraints = new Constraints.Builder()
                .setRequiresCharging(true)
                .build();

    PeriodicWorkRequest saveRequest =

                new PeriodicWorkRequest.Builder(UploadLog.class, 15,TimeUnit.MINUTE)
                        // Constraints
                        .setConstraints(constraints)
                        .build();//间隔执行

        这里面添加了Constraints 约束条件,就是在定情情况下,才会执行这个任务 .

工作约束

约束可确保将工作延迟到满足最佳条件时运行。以下约束适用于 WorkManager。

NetworkType约束运行工作所需的网络类型。例如 Wi-Fi (UNMETERED)。
BatteryNotLow如果设置为 true,那么当设备处于“电量不足模式”时,工作不会运行。
RequiresCharging如果设置为 true,那么工作只能在设备充电时运行。
DeviceIdle如果设置为 true,则要求用户的设备必须处于空闲状态,才能运行工作。在运行批量操作时,此约束会非常有用;若是不用此约束,批量操作可能会降低用户设备上正在积极运行的其他应用的性能。
StorageNotLow如果设置为 true,那么当用户设备上的存储空间不足时,工作不会运行。

 运行任务

        WorkManager
                .getInstance(this).enqueue(uploadLog);

OK  掌握基本用法以后,还有很多,类似于取消任务,传递参数这些,通过阅读官网都可以参看啦

参考

https://developer.android.com/topic/libraries/architecture/workmanager/how-to/define-work?hl=zh-cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值