一、WorkManger简介
1.1 作用
看google官网介绍,WorkManger旨在用于可延迟运行(不要求立即执行)并且在应用推出或者设备重启时能够可靠运行。看到这里感觉到了WorkManger似乎就是为了进程保活而诞生的,其实不然。
1.2 应用场景
(1)埋点上传
(2)非即时性上传和下载
(3)等等
试想为什么Google在有service的前提下,还会推出一个WorkManger呢?
1.3 优势
1、确保可以被执行,并且可以设置执行的限定条件(例如仅仅在有网络连接的时候才进行图片的上传);
2、同样受到系统后台任务的限制管理(如APP进入Doze Mode的时候,任务不会被执行);
3、任务可串联;例如执行任务A之前需要任务B或者C先进行完成;
1.4 三要素
和Navigation相似,WorkManager也有三要素:Work、WorkRequest、WorkManager。
(1)Work:继承Work类,将要做的事情放在继承类中,重写doWork方法,很好理解;
(2)WorkRequest:定义Work在后台该怎么做,做几次有WorkRequest决定,如OneTimeWorkRequest(执行一次)、PeriodicWorkRequest(重复执行);
(3)WorkManager:从字面上理解就是管理类,用于管理WorkReuqest。
二、使用方法
导入依赖
def work_version = "2.3.4"
implementation "androidx.work:work-runtime:$work_version"
定义MyWork继承Worker,重写doWork方法
public class MyWork extends Worker {
public static final String TAG = MyWork.class.getSimpleName();
private Context context;
private WorkerParameters workerParams;
public MyWork(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
this.context = context;
this.workerParams = workerParams;
}
@NonNull
@Override
public Result doWork() {
Log.e(TAG, "doWork: 后台任务执行了");
// 接收Activity传递过来的数据
final String dataString = workerParams.getInputData()