WorkManager 是适合用于持久性工作的推荐解决方案。如果工作始终要通过应用重启和系统重新启动来调度,便是持久性的工作。由于大多数后台处理操作都是通过持久性工作完成的,因此 WorkManager 是适用于后台处理操作的主要推荐 API。
WorkManager 可处理三种类型的持久性工作:
dependencies {
def work_version = "2.7.1"
// (仅限Java)
implementation "androidx.work:work-runtime:$work_version"
// Kotlin+协程
implementation "androidx.work:work-runtime-ktx:$work_version"
// (可选)RxJava2支持
implementation "androidx.work:work-rxjava2:$work_version"
// (可选) GCMNetworkManager支持
implementation "androidx.work:work-gcm:$work_version"
//(可选) 测试使用
androidTestImplementation "androidx.work:work-testing:$work_version"
// (可选) 多进程支持
implementation "androidx.work:work-multiprocess:$work_version"
}
import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
class TestKWork(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
/**
*重写此方法以执行实际的后台处理。此方法在
*后台线程-您需要同步完成工作并返回
*{@link androidx.work.ListenableWorker.Result}。一旦你从这里回来
*方法,工人被视为已完成其工作,并将被销毁。如果
*您需要在自己选择的线程上异步执行工作,请参见
*{@link ListenableWorker}。
*工人有明确的定义
*执行窗口
*以完成其执行并返回{@link androidx.work.ListenableWorker.Result}。之后
*此时间已过期,将向工人发出停止的信号。
*
*@return计算的{@link androidx.work.ListenableWorker.Result};请注意
*如果使用
*{@link androidx.work.ListenableWorker.Result#failure()}或
*{@link androidx.work.ListenableWorker.Result#failure(数据)}
*/
override fun doWork(): Result {
//执行后台任务
return Result.success()
}
}
返回值简要注明:
1、/**
*返回{@link Result}的实例,该实例可用于指示工作
*已成功完成。任何依赖于此的工作都可以执行,只要
*满足其其他依赖性和约束。
*
*@return表示成功执行工作的{@link Result}实例
*/
Result.success()
2、/**
*返回{@link Result}的实例,该实例可用于指示工作
*遇到暂时性失败,应使用中指定的回退重试
*{@linkWorkRequest.Builder#setBackoffCriteria(BackoffPolicy,long,TimeUnit)}。
*
*@return{@link Result}的实例,指示需要重试工作
*/
Result.retry()
3、/**
*返回{@link Result}的实例,该实例可用于指示工作
*以永久性故障完成。任何依赖于此的工作也将标记为
*失败,将不会运行 如果你需要童工来跑步,你需要使用
*{@link#success()}或{@link#success(数据)};故障表示永久停机
*工作链的一部分。
*
*@return执行工作时指示失败的{@link Result}实例
*/
Result.failure()
val workManager = WorkManager.getInstance(context)
val request: WorkRequest = OneTimeWorkRequest
.Builder(TestKWork::class.java)
.addTag("TestKWork")
.build()
workManager.enqueue(request)
//取消全部任务
workManager.cancelAllWork()
//通过任务的ID 取消任务
workManager.cancelWorkById(request.id)
//取消对应的TAG的全部任务
workManager.cancelAllWorkByTag("TestKWork")
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
public class TestJWork extends Worker {
public TestJWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
return Result.success();
}
}
WorkManager workManager = WorkManager.getInstance(this);
WorkRequest request = new OneTimeWorkRequest
.Builder(TestJWork.class)
.addTag("TestJWork")
.build();
workManager.enqueue(request);
workManager.cancelAllWork();
workManager.cancelWorkById(request.getId());
workManager.cancelAllWorkByTag("TestJWork");
以上内容只是WorkManager的简要内容,具体内容还是以Google官方文档为准
如何定义和自定义 WorkRequest 对象来处理常见用例,例如:
1.调度一次性工作和重复性工作
2.设置工作约束条件,例如要求连接到 Wi -Fi 网络或正在充电
3.确保至少延迟一定时间再执行工作
4.设置重试和退避策略
5.将输入数据传递给工作
6.使用标记将相关工作分组在一起
关于定义WorkManager - Google官方说明文档
如果对您有一些意义,希望您给博主一些鼓励(点赞、关注、收藏),如果有错误欢迎大家评论。