【问题标题】:OneTimeWorkRequest does not run when display is off显示器关闭时 OneTimeWorkRequest 不运行
【发布时间】:2022-11-27 15:08:19
【问题描述】:

我需要执行快速的周期性后台任务,但 PeriodicWorkRequest 被限制为 15 分钟,所以我使用 OneTimeWorkRequest 并再次自行设置。 我设置了不强制充电的约束,但根据我的测试,OneTimeWorkRequest 在显示屏关闭且未连接充电线时不会运行(大约在停止 1 分钟后) 但是当连接充电线时它工作正常!我只在 android 12 上遇到这个问题,无论它是否适用于经过测试的 android 6-7-8 和 10!

Constraints constraints = new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.NOT_REQUIRED)
                .setRequiresCharging(false)
                .setRequiresBatteryNotLow(false)
                .build();
        WorkRequest sendWorkRequest = new OneTimeWorkRequest.Builder(PeriodicSync.class).setInitialDelay(10, TimeUnit.SECONDS)
                .addTag("sendData").setConstraints(constraints).build();
        WorkManager.getInstance(Global.Controller().loginActivity).enqueue(sendWorkRequest);

【问题讨论】:

    标签: android androidx android-workmanager


    【解决方案1】:

    在 android 12 上,使用工作请求构建器中的 setExpedited() 方法:

    val request = OneTimeWorkRequestBuilder<HighPriorityWorker>()       
        .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)   
        .build() 
    WorkManager.getInstance(context).enqueue(request)
    

    调用setExpedited() 告诉框架这项工作很重要,应该优先于其他计划的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 2018-09-13
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多