#android #android-workmanager
#Android #android-workmanager
Вопрос:
Лучше ли использовать несколько рабочих, которые выполняют одну и ту же задачу для входных данных, или одного рабочего, который выполняет задачу несколько раз для входных данных?
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();
Похоже, что первый подход будет потреблять меньше памяти, но займет больше времени, чем второй, который будет потреблять больше памяти из-за большего количества рабочих менеджеров, но займет меньше времени.
Ответ №1:
Это зависит.
Я бы сказал, используйте один Worker
, если вы не знаете, что можете запустить окно 10
минутного выполнения, или если вы знаете, что есть части Worker
, которые полезны независимо (т. Е. Повторно Используются из других частей приложения).
Комментарии:
1. Но можете ли вы распределить задачу внутри одного рабочего для параллельного выполнения или вам придется развернуть несколько для достижения этой цели.
2. Вы также можете распределить задачу для параллельного выполнения с несколькими потоками или сопрограммами. Каждый рабочий запрос имеет стоимость (постоянство планирование). Вы должны стараться избегать этих затрат, когда сможете.