【问题标题】:WorkManager adding too many jobs to JobSchedulerWorkManager 向 JobScheduler 添加太多作业
【发布时间】:2018-08-20 00:39:13
【问题描述】:

我正在尝试使用WorkManager 安排任务在特定时间运行。我正在使用beginUniqueWork,因为我希望一次只为该特定 ID (uniqueWorkName) 安排一个任务。但是在多次调用enqueue 之后,有时我会收到以下错误:

java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
    at android.os.Parcel.readException(Parcel.java:2012)
    at android.os.Parcel.readException(Parcel.java:1950)
    at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:180)
    at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:44)
    at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:85)
    at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:64)
    at androidx.work.impl.Schedulers.scheduleInternal(Schedulers.java:98)
    at androidx.work.impl.Schedulers.schedule(Schedulers.java:69)
    at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(WorkManagerImpl.java:398)
    at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:66)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
    at java.lang.Thread.run(Thread.java:764)

当我在每个enqueue 之后使用以下 sn-p 记录待处理作业的数量时,我注意到每次调用都有 3 个新作业添加到列表中(而我希望总数保持在 1)。

JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
int size = jobScheduler.getAllPendingJobs().size();

这是我用来安排任务的代码:

val work = OneTimeWorkRequest.Builder(workerClass)
        .setInitialDelay(offset, TimeUnit.MILLISECONDS)
        .build()
WorkManager.getInstance()
        .beginUniqueWork(uniqueNameForTask, ExistingWorkPolicy.REPLACE, work)
        .enqueue()

这里有什么不对劲吗?我错过了什么? ????

【问题讨论】:

  • 你当前的worker版本是什么?
  • 是 1.0.0-alpha01。升级到 1.0.0-alpha07 解决了这个问题????

标签: android android-jobscheduler android-jetpack android-workmanager


【解决方案1】:

根据WorkManager 1.0.0-alpha07 release notes,1.0.0-alpha07 的修复之一是:

已完成执行的工作现在可以正确取消其他调度程序中该工作的所有待处理副本。这导致超出 JobScheduler 作业限制。 b/111569265

所以升级到 1.0.0-alpha07 应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多