java - 达到 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
解决方案
我们最近修复了一个错误,其中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 子类中执行此操作。
如果您需要更多帮助,请随时联系错误跟踪器,我可以为您提供帮助。
推荐阅读
- c# - C# 如何使用 .Net Framework 关闭打开的文件?
- javascript - 是否可以在没有任何交互的情况下拍照?(Android Studio、CameraX)
- node.js - 使用 Node-RED 在 Firebase 中添加自定义节点
- oracle - 通过立即执行无管道创建 Oracle 序列 || 操作员
- python - PYTHON (tkinter) 在条目中创建增量值
- awk - 打印两个图案之间的线条以及标题
- xml - XSLT:如何从指定元素中删除除某些属性之外的所有属性
- python - 从 Pandas 数据框中计算人口
- apache-spark - 使用 PySpark 和 XGboost 获取特征重要性
- php - Clevertap 中的端点无效