Лучше ли использовать несколько рабочих, которые выполняют одну и ту же задачу для входных данных, или один рабочий, который выполняет задачу несколько раз для входных данных?
1 работник:
\\\ SomeWorker.class
@NonNull
@Override
public Worker.Result doWork() {
Context applicationContext = getApplicationContext();
boolean success = Boolean.TRUE;
List<String> resourceUris = new ArrayList<String>(has a list of strings);
for (String resourceUri : resourceUris) {
success = doSomething(resourceUri);
}
return success ? Result.success() : Result.retry();
}
\\\ Viewmodel.class
OneTimeWorkRequest save = new OneTimeWorkRequest.Builder(SomeWorker.class)
.addTag(TAG_OUTPUT)
.build();
workManager.beginUniqueWork(save).enqueue();
против
Несколько рабочих, которые выполняют одно задание независимо:
\\\ Someworker.class
@NonNull
@Override
public Worker.Result doWork() {
Context applicationContext = getApplicationContext();
String resourceUri = getInputData().getString("RESOURCE_URI");
return doSomething(resourceUri) ? Result.success() : Result.retry();
}
\\\ Viewmodel.class
List<String> resourceUris = new ArrayList<String>(has a list of strings);
List<OneTimeWorkRequest.Builder> someBuilder;
for (int i = 0; i < resourceUris.size(); i++) {
someBuilder.add( new OneTimeWorkRequest.Builder(Someworker.class));
}
workManager.beginUniqueWork(someBuilder).enqueue();
Кажется, что первый подход потребляет меньше памяти, но займет больше времени, чем второй, который потребляет больше памяти из-за большего количества менеджеров работы, но займет меньше времени.