当当前工作程序仍在运行时,Android工作管理器会在10分钟后调用工作程序

问题描述 投票:0回答:2

我有一名定期工作的工人,每15分钟执行一次。工作人员将数据文件上传到服务器。但是,当当前工作人员花时间上载并仍在运行时,工作管理器会在10分钟后调用工作程序,但会在10分钟后调用该工作程序,这会导致问题,因为他们俩都试图访问数据库并互相覆盖。当当前工作程序仍在运行时,有什么方法可以阻止工作程序在10分钟后被调用。

我正在使用2.3.0-alpha03版本。

谁能帮忙吗?

android android-workmanager
2个回答
0
投票

我会尝试将工作线程放在同一后台线程上,因此工作请求将一个接一个地排队。

WorkManager.initialize(
    context,
    new Configuration.Builder()
        .setExecutor(Executors.newFixedThreadPool(1))
        .build());

您可以阅读有关线程和WorkManager here的更多信息


0
投票

如果约束使工作请求无法运行,则您应该能够对周期性工作程序使用相等约束,请在oneTimeWorker运行之前将相等状态设置为false,在工作完成之后将相等状态设置为true。

private boolean RUN_WORKER = true;

Constraints constraints = new Constrains.Builder()
    .equals(RUN_WORKER)
    .build

PeriodicWorkRequest request =
        new PeriodicWorkRequest.Builder(myPeriodicWorker.class, 10, TimeUnit.MINUTES)
                  .setConstraints(constraints)
                  .build();

WorkManager.getInstance(myContext)
    .enqueue(request);

运行OneTimeWorker的方法

RUN_WORKER = false;

OneTimeWorkRequest request = new OneTimeWorkResquest = 
    new OneTimeWorkRequest.Builder(OneTimeWorker.class)
    .build();


WorkManager.getInstance(mContext).getWorkInfoByIdLiveData(request.getId())
        .observe(lifecycleOwner, new Observer<WorkInfo>() {
            @Override
            public void onChanged(@Nullable WorkInfo workInfo) {
              if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
                  displayMessage("Work finished!")
              }

              RUN_WORKER = true;
            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.