从 V1 迁移时,WorkManager 2.0.1 到 2.1.0 api 更改 "setInitialDelay"

WorkManager 2.0.1 to 2.1.0 api change "setInitialDelay" when migrating from V1

我有一个 android 库,它使用 Work manager 来处理任务调度。为了向后兼容性,我使用支持库制作了库。

因为 setInitialDelay 在 WorkManager v2.1.0 中移到了父级 class,如果库使用它(同时使用 WorkManager v1 和支持库),Jetifier 将使 WorkManger v1 就像 WorkManager v2.0.1 而不是 v2.0.2。所以这会导致错误:

Caused by: java.lang.NoSuchMethodError:
 No virtual method setInitialDelay(JLjava/util/concurrent/TimeUnit;)Landroidx/work/OneTimeWorkRequest$Builder;
 in class Landroidx/work/OneTimeWorkRequest$Builder;

旧的workManager(2.0.1)代码是这样的:

abstract class WorkRequest {
    abstract static class Builder<B extends Builder, W extends WorkRequest> {
    }
}

class OneTimeWorkRequest extends WorkRequest {
   static class Builder extends WorkRequest.Builder<Builder, OneTimeWorkRequest> {
       public @NonNull Builder setInitialDelay(long duration, @NonNull TimeUnit timeUnit) {
          ....
       }
  }
}

而新的 (^2.1.0) 是:

abstract class WorkRequest {
    abstract static class Builder<B extends Builder, W extends WorkRequest> {
         public @NonNull B setInitialDelay(long duration, @NonNull TimeUnit timeUnit) {
              ...
         }
    }
}

class OneTimeWorkRequest extends WorkRequest {
   static class Builder extends WorkRequest.Builder<Builder, OneTimeWorkRequest> {
  }
}

TL;DR

如果开发人员使用 workManager v2.1.0具有 WorkManager v1 并使用 Jetifer 转换为v2?

不幸的是,API 更改是一个中断,要解决此问题,您必须将项目迁移到 A​​ndroidX

androidx.workmanager 的进一步更改将不考虑与 android.arch 工件的兼容性。