Job*_*b M 5 android android-architecture-components android-jetpack android-workmanager
WorkManager 是一个用于排队工作的库,保证在满足其约束后执行。WorkManager 允许观察工作状态和创建复杂工作链的能力。
支持的有效类型仅包括:Boolean、Integer、Long、Double、String 和每种类型的数组版本。
// Define the Worker class:
public class MathWorker extends Worker {
// Define the parameter keys:
public static final String KEY_X_ARG = "X";
public static final String KEY_Y_ARG = "Y";
public static final String KEY_Z_ARG = "Z";
// ...and the result key:
public static final String KEY_RESULT = "result";
public MathWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}
@Override
public Worker.Result doWork() {
// Fetch the arguments (and specify default values):
int x = getInputData().getInt(KEY_X_ARG, 0);
int y = getInputData().getInt(KEY_Y_ARG, 0);
int z = getInputData().getInt(KEY_Z_ARG, 0);
// ...do the math...
int result = myCrazyMathFunction(x, y, z);
//...set the output, and we're done!
Data output = new Data.Builder()
.putInt(KEY_RESULT, result)
.build();
setOutputData(output);
return Result.SUCCESS;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何传递复杂类型,例如:
Map<String, Object> studListMap = new HashMap<>();
studListMap.put("list", studentDetails);
// Create the Data object:
@SuppressLint("RestrictedApi")
Data myData = new Data.Builder()
.put(KEY_STUD_LIST_ARG,studListMap)
.build();
//set network required
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
Run Code Online (Sandbox Code Playgroud)
如果可能的话,您可以序列化您的 POJO。例如,如果它确实小而简单,您可以使用 JSON 将其编码为字符串,然后在 Worker 中对其进行解码。
已经使用了 gson,因为它已经是这个应用程序中的依赖项。
Map<String, Object> studListMap = new HashMap<>();
studListMap.put("list", studentDetails);
Type listOfStudObject = new TypeToken<List<StudentDetails>>(){}.getType();
String s = gson.toJson(studentDetails, listOfStudObject);
// Create the Data object:
@SuppressLint("RestrictedApi")
Data myData = new Data.Builder()
.putString(KEY_STUD_LIST_ARG,s)
.build();
//set network required
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
// ...then create and enqueue a OneTimeWorkRequest that uses those arguments
OneTimeWorkRequest attendWork = new OneTimeWorkRequest.Builder(AddAttendanceWorker.class)
.setConstraints(myConstraints)
.setInputData(myData)
.build();
WorkManager.getInstance()
.enqueue(attendWork);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3002 次 |
| 最近记录: |