在达到 JobScheduler 限制 100 后,WorkManager 将如何处理作业?

bar*_*e.m 7 java android android-jetpack android-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

Rah*_*hul 1

我们最近修复了一个错误,其中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"
}
Run Code Online (Sandbox Code Playgroud)

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

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