K.C*_*Cai 5 android android-workmanager
工人Worker()是@Deprecated,所以需要使用
public Worker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
Run Code Online (Sandbox Code Playgroud)
但WorkerParameters的构造函数是@hide。
那么,如何创建WorkerParameters实例呢?
该库是Android后台任务调度库的最新版本,但是该库最近更新了API,以将核心类的旧创建方法标记为已废弃
现在,我不知道如何创建此核心类,因为其中一个参数不会公开构造函数,也无法找到Factory / Builder的工作方式
因此,让我看看是否有人可以在我的Stack Overflower中帮助我。
核心课程是工人?params是WorkerParameters
好的,您需要查询的是最新版本的(dependency:android.arch.work : work-runtime : 1.0.0-alpha09)的库,WorkManager
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
Run Code Online (Sandbox Code Playgroud)
(Worker将我们的类对象传递给我们WorkRequest)
这意味着这WorkParameters是DefaultWorkerFactory内部提供的。因此,您不必担心,因为,Worker除非您需要任何自定义的设置,否则我们将不会自己创建新对象(此版本现在可以实现这一点,这很好)。
此外,根据2018年9月19日的最新API更改
- 现在,您可以
Worker通过在中指定一个WorkerFactory来在运行时创建自己的实例WorkManager.Configuration。后备工厂为DefaultWorkerFactory,与以前版本的行为相匹配WorkManager。- 默认构造函数
Worker和NonBlockingWorker现在被标记为已过时。请使用新的构造函数,(Worker(Context, WorkerParameters))并调用的super(Context, WorkerParameters);未来版本WorkManager将删除默认的构造函数。
所以现在,这就是这个问题的全部原因,如果我要创建该WorkerParameters怎么办?
答案是,在创建之前WorkerParameters,您需要覆盖WorkManager库的默认行为,并WorkManager.Configuration通过Worker在运行时提供库来创建自己的库,从而提供自己的自定义&WorkerParameters。(在这种情况下,我们需要提供WorkerParameters,如果您开箱即用地使用WorkManager功能,则可能不想这样做)
有一个GoogleCodeLab的例子,它很好地解释了WorkManager(您可以在这里看到如何使用新的构造函数来完成)。
假设您有一个名为的Worker类FooWorker,那么您的代码将如下所示:
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.
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样初始化
//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.
Run Code Online (Sandbox Code Playgroud)
因此,有任何情况下访问/创建构造函数/对象的WorkerParamters。
我希望这个答案能满足您的问题并有所帮助。
| 归档时间: |
|
| 查看次数: |
1743 次 |
| 最近记录: |