在上面的MyWorker实例中,继承了Worker 并且重写了doWork()方法,需要注意的是doWork()方法是有返回值Worker.Result的,可以在任务执行成功是返回Worker.Result.SUCCESS,在任务执行出现异常时返回Worker.Result.FAILURE
doWork()方法的返回值主要有三种
1、Worker.Result.SUCCESS 表示任务执行成功
2、Worker.Result.FAILURE 表示任务执行失败
3、Worker.Result.RETRY 通知WorkManager之后再尝试执行该任务
WorkRequest
WorkRequest要指定执行任务的Worker,也可以给WorkRequest加一些规则,比如说什么时候执行任务,任务执行一次还是多次,每一个WorkRequest都有一个自动产生的唯一ID,可以根据唯一ID获取对应任务的状态以及是否取消对应的任务。如下图WorkRequest有两个实现类如下图:
1、OneTimeWorkRequest 任务只执行一次
OneTimeWorkRequest myWorkRequest =
new OneTimeWorkRequest.Builder(MyWorker.class)
.build();
//将上面定义的MyWorker加入到OneTimeRequest.Builder方法中
WorkManager.getInstance().enqueue(myWorkRequest);//获取WorkManager实例并将WorkRequest进队
2、PeriodicWorkRequest
PeriodicWorkRequest重复执行任务,直到被取消才停止。首次执行是任务提交后立即执行或者满足所给的 Constraints条件。以后执行都会根据所给的时间间隔来执行。注意任务的执行可能会有延时,因为WorkManager会根据OS的电量进行优化。
假如设置的Periodic Work是24小时执行一次,有可能根据电池优化策略执行的过程如下:
1 | Jan 01, 06:00 AM
2 | Jan 02, 06:24 AM
3 | Jan 03, 07:15 AM
4 | Jan 04, 08:00 AM
5 | Jan 05, 08:00 AM
6 | Jan 06, 08:02 AM
由上面的执行时间可以看出,Perio