我正在开发一个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。

07-28 12:37