工人的Worker()是@Deprecated,所以需要使用public Worker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); }但是workerparameters的构造函数是@hide。那么,如何创建workerparameters实例呢?这个库是android后台任务调度库的最新版本,但是这个库最近更新了api,将核心类的旧创建方法标记为丢弃现在,我不知道如何创建这个核心类,因为其中一个参数没有公开构造函数,也没有找到factory/builder的工作方式所以,让我看看是否有人可以帮助我在伟大的堆栈溢出。核心类是worker,params是workerparameters 最佳答案 好的,所以对您的查询来自最新版本的库(依赖项:android.arch.work:work runtime:1.0.0-alpha09)。Theres的构造函数从到WorkManager这意味着默认构造函数现在不再有用(已弃用,标记为在将来的版本中应该删除它)&we're now onWorker()。现在,如果你注意到当我们使用Worker(@NonNull Context appContext, @NonNull WorkerParameters workerParams)时,我们并不是直接创建新的parameterized constructor,而是这样做,OneTimeWorkRequest.from(FooWorker.class) // We pass Class<?> obj of our worker here, or in PeriodicWorkRequest-it's the same(将我们的Worker类对象传递给我们的object)这意味着Worker是由WorkRequest内部提供的。所以您不必担心它,因为我们不会自己创建WorkParameters的新对象,除非您需要任何自定义设置(现在这个版本可以实现这一点&这很好)。另外,从2018年9月19日最新的API变更现在可以在运行时创建自己的DefaultWorkerFactory实例,方法是将Worker指定为Worker的一部分。回退工厂是WorkerFactory,它与行为匹配以前版本的WorkManager.Configuration。DefaultWorkerFactory和WorkManager的默认构造函数现在标记为已弃用。请使用新的构造函数Worker并调用NonBlockingWorkerfuture(Worker(Context, WorkerParameters))的版本将删除默认构造函数。所以现在,这就是为什么这个问题是关于,如果我想创建super(Context, WorkerParameters);?答案是,在创建WorkManager之前,您需要覆盖WorkerParameters库的默认行为,并提供您自己的自定义WorkerParameters&通过创建您自己的WorkManager,在运行时向其提供WorkManager.Configuration。(在这种情况下,我们需要提供WorkerParameters,如果您只是使用现成的WorkManager功能,则可能不希望这样做)googlecodelab的example很好地解释了Worker(您可以看到here如何使用新的构造函数)。结论:假设您有一个名为WorkerParameters的工作类,那么您的代码将如下所示: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 WorkManagerprivate WorkManager mWorkManager;mWorkManager = WorkManager.getInstance();// Enqueue our work to managermWorkManager.enqueue(OneTimeWorkRequest.from(FooWorker.class)); // Here, we're not creating new FooWorker(); & we don't need to worry about `WorkerParameters` for now.所以不需要访问/创建WorkManager的构造函数/对象。我希望这个答案能满足你的问题并有所帮助。
08-18 07:57