我正在尝试使用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
吗?
感谢您的建议。