如何创建 WorkerParameters
How can create WorkerParameters
工人的 Worker()
是 @Deprecated
,所以需要使用
public Worker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
但是 WorkerParameters 的构造函数是 @hide
.
那么,如何创建 WorkerParameters 实例?
本库是Android后台任务调度库的最新版本,但是本库最近更新了API将核心class的旧创建方法标记为废弃
现在,我不知道如何创建这个核心class,因为其中一个参数没有公开构造函数,我也没有找到 Factory / Builder 的工作方式
所以让我看看有没有人可以在伟大的 Stack Overflower 中帮助我。
核心class是Worker,params是WorkerParameters
好的,所以向您查询的是 WorkManager
(dependency : android.arch.work:work-runtime:1.0.0-alpha09),
Theres 的构造函数从
Worker()
到
Worker(@NonNull Context appContext, @NonNull WorkerParameters workerParams)
.
这意味着默认构造函数现在不再有用 (已弃用,标记为应在未来版本中将其删除),我们现在在 parameterized constructor
。
现在,如果您注意到当我们使用 Worker
时,我们并没有直接创建新的 object
,而是我们做这样的事情,
OneTimeWorkRequest.from(FooWorker.class) // We pass Class<?> obj of our worker here, or in PeriodicWorkRequest-it's the same
(将我们 Worker
的 class 对象传递给我们的 WorkRequest
)
这意味着WorkParameters
是DefaultWorkerFactory
内部提供的东西。所以你不必担心,因为我们不会自己创建 Worker
的新对象,除非你想要任何自定义设置 (这个版本现在可以实现并且很好).
Also, from latest API changes on September 19, 2018
- You can now create your own
Worker
instances at runtime by specifying a WorkerFactory
as part of the WorkManager.Configuration
.
The fallback factory is DefaultWorkerFactory
, which matches behavior
of previous versions of WorkManager
.
- The default constructors for
Worker
and NonBlockingWorker
are now marked as deprecated. Please use the new constructor (Worker(Context, WorkerParameters))
and call super(Context, WorkerParameters);
future
versions of WorkManager
will remove the default constructor.
所以现在,这就是这个问题的全部原因,如果我想创建 WorkerParameters
?
答案是,在您可以创建 WorkerParameters
之前,您需要覆盖 WorkManager
库的默认行为并提供您自己的自定义 WorkManager.Configuration
并在运行时通过向其提供 WorkerParameters
创建您自己的 Worker
。 (在这种情况下,我们需要提供 WorkerParameters,如果您只是使用开箱即用的 WorkManager 功能,您可能不想这样做)
有 GoogleCodeLab 的 example which beautifully explains WorkManager
(You can see here 它是如何使用新的构造函数完成的)。
结论:
假设您有一个名为 FooWorker
的 Worker class,那么您的代码将如下所示:
public class FooWorker extends Worker {
public FooWorker(
@NonNull Context appContext,
@NonNull WorkerParameters workerParams) {
super(appContext, workerParams);
}
private static final String TAG = FooWorker.class.getSimpleName();
@NonNull
@Override
public Worker.Result doWork() {
// Do some work & return appropriate result.
}
}
并像这样初始化
//Init WorkManager
private WorkManager mWorkManager;
mWorkManager = WorkManager.getInstance();
// Enqueue our work to manager
mWorkManager.enqueue(OneTimeWorkRequest.from(FooWorker.class)); // Here, we're not creating new FooWorker(); & we don't need to worry about `WorkerParameters` for now.
所以 access/create constructor/object 不存在 WorkerParamters
.
希望这个回答能解决您的问题并对您有所帮助。
工人的 Worker()
是 @Deprecated
,所以需要使用
public Worker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
但是 WorkerParameters 的构造函数是 @hide
.
那么,如何创建 WorkerParameters 实例?
本库是Android后台任务调度库的最新版本,但是本库最近更新了API将核心class的旧创建方法标记为废弃
现在,我不知道如何创建这个核心class,因为其中一个参数没有公开构造函数,我也没有找到 Factory / Builder 的工作方式
所以让我看看有没有人可以在伟大的 Stack Overflower 中帮助我。
核心class是Worker,params是WorkerParameters
好的,所以向您查询的是 WorkManager
(dependency : android.arch.work:work-runtime:1.0.0-alpha09),
Theres 的构造函数从
Worker()
到
Worker(@NonNull Context appContext, @NonNull WorkerParameters workerParams)
.
这意味着默认构造函数现在不再有用 (已弃用,标记为应在未来版本中将其删除),我们现在在 parameterized constructor
。
现在,如果您注意到当我们使用 Worker
时,我们并没有直接创建新的 object
,而是我们做这样的事情,
OneTimeWorkRequest.from(FooWorker.class) // We pass Class<?> obj of our worker here, or in PeriodicWorkRequest-it's the same
(将我们 Worker
的 class 对象传递给我们的 WorkRequest
)
这意味着WorkParameters
是DefaultWorkerFactory
内部提供的东西。所以你不必担心,因为我们不会自己创建 Worker
的新对象,除非你想要任何自定义设置 (这个版本现在可以实现并且很好).
Also, from latest API changes on September 19, 2018
- You can now create your own
Worker
instances at runtime by specifying aWorkerFactory
as part of theWorkManager.Configuration
. The fallback factory isDefaultWorkerFactory
, which matches behavior of previous versions ofWorkManager
.- The default constructors for
Worker
andNonBlockingWorker
are now marked as deprecated. Please use the new constructor(Worker(Context, WorkerParameters))
and callsuper(Context, WorkerParameters);
future versions ofWorkManager
will remove the default constructor.
所以现在,这就是这个问题的全部原因,如果我想创建 WorkerParameters
?
答案是,在您可以创建 WorkerParameters
之前,您需要覆盖 WorkManager
库的默认行为并提供您自己的自定义 WorkManager.Configuration
并在运行时通过向其提供 WorkerParameters
创建您自己的 Worker
。 (在这种情况下,我们需要提供 WorkerParameters,如果您只是使用开箱即用的 WorkManager 功能,您可能不想这样做)
有 GoogleCodeLab 的 example which beautifully explains WorkManager
(You can see here 它是如何使用新的构造函数完成的)。
结论:
假设您有一个名为 FooWorker
的 Worker class,那么您的代码将如下所示:
public class FooWorker extends Worker {
public FooWorker(
@NonNull Context appContext,
@NonNull WorkerParameters workerParams) {
super(appContext, workerParams);
}
private static final String TAG = FooWorker.class.getSimpleName();
@NonNull
@Override
public Worker.Result doWork() {
// Do some work & return appropriate result.
}
}
并像这样初始化
//Init WorkManager
private WorkManager mWorkManager;
mWorkManager = WorkManager.getInstance();
// Enqueue our work to manager
mWorkManager.enqueue(OneTimeWorkRequest.from(FooWorker.class)); // Here, we're not creating new FooWorker(); & we don't need to worry about `WorkerParameters` for now.
所以 access/create constructor/object 不存在 WorkerParamters
.
希望这个回答能解决您的问题并对您有所帮助。