WorkManager定义:
WorkManager API可以轻松地让异步任务延迟执行以及何时运行它们,这些API可让我们创建任务并将其交给WorkManager,以便立即或在适当的时间运行。例如,应用程序可能需要不时从网络下载新资源,我们可以使用WorkManager API设置一个任务,然后选择适合它运行的环境(例如“仅在设备充电和联网时”),并在符合条件时将其交给 WorkManager 运行,即使该应用程序被强制退出或者设备重新启动,这个任务仍然可以保证运行
WorkManager适用于那些即使应用程序退出,系统也能够保证这个任务正常运行的场景,比如将应用程序数据上传到服务器。它不适用于应用进程内的后台工作,如果应用进程消失,就可以安全地终止,对于这种情况,需要选择ThreadPool、AsyncTask来实现。
Work的约束:
.setRequiredNetworkType(NetworkType.CONNECTED)//网络连接时执行
.setRequiresBatteryNotLow(true) //不在电量不足执行
.setRequiresCharging(true) //在充电时执行
.setRequiresStorageNotLow(true) //不在存储容量不足时执行
.setRequiresDeviceIdle(true) //在待机状态下执行 调用需要API级别最低为23
Work设置网络约束时的 各个值类型的作用
NetworkType.NOT_REQUIRED:对网络没有要求
NetworkType.CONNECTED:网络连接的时候执行
NetworkType.UNMETERED:不计费的网络比如WIFI下执行
NetworkType.NOT_ROAMING:非漫游网络状态
NetworkType.METERED:计费网络比如3G,4G下执行。
开始创建Work
package io.dcloud.H56580E2E.viewModelLiveData;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.gson.Gson;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.work.Data;
import androidx.work.Worker;
import io.dcloud.H56580E2E.R;
import io.dcloud.H56580E2E.info.ImageInfo;
import io.dcloud.H56580E2E.service.MainInterfaceService;
import io.dcloud.H56580E2E.util.BaseObserver;
import io.dcloud.H56580E2E.util.RetrofitHelper;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
public class DomeWork extends Worker {
// 服务请求接口
private MainInterfaceService main_interfaceService;
@NonNull
@Override
public WorkerResult doWork() {
/**
* WorkerResult.SUCCESS //成功
* WorkerResult.FAILURE //失败
* WorkerResult.RETRY //重试
*/
//接收传递进来的参数
String parame_str = this.getInputData().getString("workparame","");
Log.i("work","任务