官网的一段话:
用于处理既需要机会性执行,又需要有保证的执行的后台工作。机会性执行意味着 WorkManager 会尽快执行您的后台工作。有保证的执行意味着 WorkManager 会负责通过逻辑保障在各种情况下启动您的工作,即使用户离开您的应用也无妨。
总结一段话:任务会执行,无论什么情况(设备重启,应用退出),一定会执行,但是什么时候执行看心情....
这些都是不需要实时要求的,就是不着急的,任务在处理就行,能完成就行...
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"
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();
}
}
这个有几种不同的类型:
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