我正在开发一个Android应用,每次用户打开Wi-Fi或移动数据时,我都使用Firebase JobDispatcher库运行后台作业,但是不幸的是,该库已弃用,现在可以使用新的WorkerManager。
我的问题是,每当只有互联网可用时,如何使用WorkerManager进行作业?
我已经检查了WorkerManager库迁移指南和文档,但是使用OneTimeWorkRequest或PeriodicWorkRequest无法实现。
这是我与Firebase JobDispatcher库一起使用以实现此目的的代码。
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job networkJob = dispatcher.newJobBuilder()
.setService(NetworkJobService.class)
.setTag(Const.NETWORK_JOB_TAG)
.setReplaceCurrent(true)
.setLifetime(Lifetime.FOREVER)
.setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(0, 0))
.setConstraints(Constraint.ON_ANY_NETWORK)
.build();
dispatcher.schedule(networkJob);
最佳答案
WorkManager的官方文档包括migration guide,用于将应用程序从Firebase JobDispatcher转换为WorkManager。
关键点是,WorkManager允许以类似于Firebase JobDispatcher的方式将Constraints
设置为您的WorkRequest
:
Constraints constraints = new Constraints.Builder()
// The Worker needs Network connectivity
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest request =
// Executes MyWorker every 15 minutes
new PeriodicWorkRequest.Builder(MyWorker.class, 15, TimeUnit.MINUTES)
// Sets the input data for the ListenableWorker
.setConstraints(constraints)
.build();
建立连接后,这每隔15分钟(最小间隔)执行一次工作。您要考虑的另一个限制是,一个Worker不能运行超过10分钟。在此间隔之后,操作系统将停止您的Worker。
这两个限制都来自Android Framework中的基础JobScheduler API。