Worker下的多个OneTimeWorkRequest导致我的应用程序冻结

时间:2018-10-17 13:29:41

标签: android android-jetpack android-workmanager

我正在尝试使用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吗?

感谢您的建议。

0 个答案:

没有答案