从 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 更改是一个中断,要解决此问题,您必须将项目迁移到 AndroidX。
androidx.workmanager
的进一步更改将不考虑与 android.arch
工件的兼容性。
我有一个 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 更改是一个中断,要解决此问题,您必须将项目迁移到 AndroidX。
androidx.workmanager
的进一步更改将不考虑与 android.arch
工件的兼容性。