android Jetpack应用实战(五)-WorkManager

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

你可能感兴趣的:(Jetpack,android,jetpack,android)