首页 > 解决方案 > 达到 JobScheduler 限制 100 后,WorkManager 对作业做了什么?

问题描述

我已经在互联网上搜索了有关此主题的信息,但似乎没有人再遇到此问题了。

还记得这个有趣的错误吗?

java.lang.IllegalStateException:超出 JobScheduler 100 作业限制。我们在 JobScheduler 中统计了 101 个 WorkManager 工作;我们的数据库中有 50 个跟踪的工作;我们的配置限制是 50。

原因:java.lang.IllegalStateException:应用程序可能不会安排超过 100 个不同的作业

好吧,尽管换了很多工作要做enqueueUniqueWork,但我的一些用户似乎仍然达到了这个限制。我的用例是为那些连接不佳且没有连接的人离线做很多事情,从而创建大量工作来更新远程服务器上的资源。我从来没有遇到过 FirebaseJobDispatcher 的这个问题(至少我没有意识到),有些人可能几天都没有信号,如果有人几周都无法连接会发生什么?它将轻松建立数百个工作岗位。因此,这个错误。

我的问题是当达到限制时这些工作会发生什么?它们只是被调度程序丢弃了吗?我现在在输入这个时会丢失人们的数据吗?

更新

Android 版本:在 7.0、8.0、8.1 上确认,可能更多

工作管理器版本:2.3.0

标签: javaandroidandroid-jetpackandroid-workmanager

解决方案


我们最近修复了一个错误,其中s 中的作业WorkManager跟踪JobScheduler与. 这发生在非常罕见的情况下,我认为这就是你的情况。jobs

https://issuetracker.google.com/issues/149092520是最近报告的错误。我在公共跟踪器上报告错误之前修复了它,因为谷歌的一个应用程序遇到了相同的边缘情况。

此更改 ( https://android-review.googlesource.com/c/platform/frameworks/support/+/1226859 ) 已修复。WorkManager我们应该很快将其作为2.3.2 的一部分发布。

如果您迫不及待,您可以使用与最终版本相同的快照构建。

这是您需要的 gradle 代码段:

repositories {
    google()
    maven { url 'https://ci.android.com/builds/submitted/6195753/androidx_snapshot/latest/repository/' }
}

dependencies {
  implementation "androidx.work:work-runtime:2.4.0-SNAPSHOT"
}

您可能需要做的另一件事是摆脱陈旧的工作。JobScheduler.cancelAllJobs()就像在 WorkManager 初始化之前调用一样简单。您可以Application.onCreate()在 Application 子类中执行此操作。

如果您需要更多帮助,请随时联系错误跟踪器,我可以为您提供帮助。


推荐阅读