在达到 100 个 JobScheduler 限制后,WorkManager 对作业做了什么?
What does WorkManager do with jobs after hitting JobScheduler limit of 100?
我在互联网上搜索了有关此主题的信息,但似乎没有人再遇到此问题。
还记得这个有趣的错误吗?
java.lang.IllegalStateException: JobScheduler 100 job limit exceeded. We count 101 WorkManager jobs in JobScheduler; we have 50 tracked jobs in our DB; our Configuration limit is 50.
和
Caused by: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
好吧,尽管转换了很多工作来做 enqueueUniqueWork
,但我的一些用户似乎仍然达到了这个极限。 我的用例适用于网络连接不畅且无法连接的人,他们在离线状态下做很多事情,从而创造大量工作来更新远程服务器上的资源。我从来没有遇到过 FirebaseJobDispatcher 的这个问题(至少我不知道),有些人可能几天没有信号,如果有人几周都无法连接会怎样?它将轻松建立数百个工作岗位。因此,这个错误。
我的问题是当达到限制时这些作业会发生什么情况?它们只是被调度程序丢弃了吗?当我输入此内容时,我现在正在丢失人们的数据吗?
更新
Android 版本:已在 7.0、8.0、8.1 上确认,可能更多
WorkManager 版本:2.3.0
从异常消息来看,WorkManager 似乎只跟踪了 20 个 WorkRequest。
该问题可能是由于 JobScheduler 的底层实现中的错误,有助于了解您在哪个 devices/OS 版本上看到这些错误。
此外,100 个作业的限制是针对每个应用的,并不限于 WorkManager 的使用。如果在您的应用程序(或您包含的 SDK 中)直接使用 JobScheduler,这可能有助于达到 100 个作业限制。
最后,能否分享一下您使用的是哪个 WorkManager 版本?
我们最近修复了一个错误,JobScheduler
中的 WorkManager
工作跟踪与 的实际 状态不匹配13=]。这种情况发生在极少数情况下,我认为这就是您的情况。
https://issuetracker.google.com/issues/149092520 是最近报告的错误。我在 public 跟踪器上报告错误之前修复了它,因为 Google 的应用程序之一 运行 进入了相同的边缘情况。
此更改 (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"
}
您可能需要做的另一件事是摆脱陈旧的工作。它就像在初始化 WorkManager 之前调用 JobScheduler.cancelAllJobs()
一样简单。您可以在 Application 子类的 Application.onCreate()
中执行此操作。
如果您需要更多帮助,请随时联系错误跟踪器,我可以帮助您。
我在互联网上搜索了有关此主题的信息,但似乎没有人再遇到此问题。
还记得这个有趣的错误吗?
java.lang.IllegalStateException: JobScheduler 100 job limit exceeded. We count 101 WorkManager jobs in JobScheduler; we have 50 tracked jobs in our DB; our Configuration limit is 50.
和
Caused by: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
好吧,尽管转换了很多工作来做 enqueueUniqueWork
,但我的一些用户似乎仍然达到了这个极限。 我的用例适用于网络连接不畅且无法连接的人,他们在离线状态下做很多事情,从而创造大量工作来更新远程服务器上的资源。我从来没有遇到过 FirebaseJobDispatcher 的这个问题(至少我不知道),有些人可能几天没有信号,如果有人几周都无法连接会怎样?它将轻松建立数百个工作岗位。因此,这个错误。
我的问题是当达到限制时这些作业会发生什么情况?它们只是被调度程序丢弃了吗?当我输入此内容时,我现在正在丢失人们的数据吗?
更新
Android 版本:已在 7.0、8.0、8.1 上确认,可能更多
WorkManager 版本:2.3.0
从异常消息来看,WorkManager 似乎只跟踪了 20 个 WorkRequest。 该问题可能是由于 JobScheduler 的底层实现中的错误,有助于了解您在哪个 devices/OS 版本上看到这些错误。
此外,100 个作业的限制是针对每个应用的,并不限于 WorkManager 的使用。如果在您的应用程序(或您包含的 SDK 中)直接使用 JobScheduler,这可能有助于达到 100 个作业限制。
最后,能否分享一下您使用的是哪个 WorkManager 版本?
我们最近修复了一个错误,JobScheduler
中的 WorkManager
工作跟踪与 的实际 状态不匹配13=]。这种情况发生在极少数情况下,我认为这就是您的情况。
https://issuetracker.google.com/issues/149092520 是最近报告的错误。我在 public 跟踪器上报告错误之前修复了它,因为 Google 的应用程序之一 运行 进入了相同的边缘情况。
此更改 (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"
}
您可能需要做的另一件事是摆脱陈旧的工作。它就像在初始化 WorkManager 之前调用 JobScheduler.cancelAllJobs()
一样简单。您可以在 Application 子类的 Application.onCreate()
中执行此操作。
如果您需要更多帮助,请随时联系错误跟踪器,我可以帮助您。