Я пытаюсь реорганизовать приложение, используя WorkerManagr, и столкнулся со следующей проблемой.
В некоторых случаях, когда необходимо вызвать синхронизацию для всех объектов, я делаю это следующим образом:
case Constants.Sync.ALL: //MASTER SYNC
myData = new Data.Builder()
.putBoolean(Constants.Sync.FORCE_SYNC, true)
.build();
workRequest = new OneTimeWorkRequest.Builder(MasterWorker.class)
.setInputData(myData)
.build();
workRequestList.add(workRequest);
break;
И вызывается для постановки в очередь workRequest с использованием:
if(workRequestList.size()>0)
mWorkManagerInstance
.enqueue(workRequestList);
, который вызывает следующий класс:
public class MasterWorker extends Worker {
private Context context;
public MasterWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
this.context = context;
}
@NonNull
@Override
public Result doWork() {
Boolean forceSync = getInputData().getBoolean(Constants.Sync.FORCE_SYNC, true);
Intent i = new Intent(context, MasterService.class);
i.putExtra(Constants.Sync.FORCE_SYNC, forceSync);
context.startService(i);
return Result.SUCCESS;
}
}
А из класса MasterWorker называется служба, которая выполняет несколько служб вв то же время, потому что эти службы не возвращают значение результата.
for (Class s : Constants.ServicesList.services) {
if (s.equals(RequestIntentService.class)) {
RequestIntentService.startActionMakeRequests(getBaseContext(), Constants.Sync.ALL);
}
else {
Intent i = new Intent(context, s);
i.putExtra(Constants.Broadcast.LIST_UPDATE_EVENT, true);
i.putExtra(Constants.Broadcast.UPDATE_REMINDERS, false);
WorkerHelper.getInstance().startWorkManager(null, i);
}
}
Синхронизация одного, двух сервисов работает нормально.Но в этом случае необходимо синхронизировать около 8 служб, что приводит к зависанию приложения.
Вопрос: Как это можно решить правильно, без необходимости удаления этих служб, пожалуйста?Возможное ли решение для цепных работников в каждом из них немедленно возвращает Result.SUCCESS
?
Спасибо за совет.