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

Java 在达到JobScheduler限制100后,WorkManager如何处理作业?,java,android,android-jetpack,android-workmanager,Java,Android,Android Jetpack,Android Workmanager,我在互联网上搜索了关于这个问题的信息,但似乎没有人再遇到这个问题了 还记得这个有趣的错误吗 java.lang.IllegalStateException:超出了JobScheduler 100作业限制。我们在JobScheduler中统计了101个WorkManager作业;我们在DB中有50个跟踪工作;我们的配置限制是50 与 原因:java.lang.IllegalStateException:应用程序调度的不同作业可能不会超过100个 好吧,尽管切换了很多工作来做排队唯一工作,但我的一些

我在互联网上搜索了关于这个问题的信息,但似乎没有人再遇到这个问题了

还记得这个有趣的错误吗

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

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

好吧,尽管切换了很多工作来做
排队唯一工作
,但我的一些用户似乎仍然达到了这个极限我的使用案例适用于那些网络连通性差且没有网络连接的人,他们在离线状态下做大量工作,从而创造大量工作来更新远程服务器上的资源。我在FirebaseJobDispatcher上从来没有遇到过这个问题(至少我没有意识到),有些人可能几天都没有信号,如果有人几周都无法连接会发生什么?它将很容易创造数百个就业机会。因此,这是一个错误

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

更新

安卓版本:7.0、8.0、8.1版本确认,可能更多


WorkManager版本:2.3.0

从异常消息中,WorkManager似乎只跟踪了20个工作请求。 这个问题可能是由于JobScheduler的底层实现中的错误造成的,了解您在哪个设备/操作系统版本上看到这些错误会很有用

此外,100个作业限制是每个应用程序的限制,并且不限于WorkManager的使用。如果在您的应用程序(或您正在使用的SDK)中直接使用JobScheduler,这可能有助于达到100个作业的限制


最后,您可以分享您使用的WorkManager版本吗?

我们最近修复了一个bug,其中
WorkManager
s对
JobScheduler
中作业的跟踪与
作业的实际状态不匹配。这种情况很少发生,我想这就是你的情况

是最近报告的一个bug。我在公共追踪器上报告bug之前修复了它,因为谷歌的一个应用程序遇到了相同的edge案例

此更改()具有修复功能。我们应该尽快将其作为
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.onCreate()
中执行此操作


如果您需要更多帮助,请随时联系bug追踪器,我可以帮助您

我更新了我的问题以包括这些内容。此外,我的应用程序不使用任何原始的实现JobScheduler。我已将所有异步工作转换为使用WorkManagerWaw!我想这肯定是我的错/缺乏知识!谢谢你,先生!似乎我一直在WorkManager中发现所有的边缘案例和间歇性错误。您能否告诉我在调度程序限制下工作请求会发生什么情况?
WorkRequest
s仍由WorkManager跟踪。当您在
JobScheduler
中的作业完成,并且插槽空闲时,我们将用以前未计划的作业填充这些插槽。你没有丢失任何数据。拉胡尔,你刚刚让我过了周末。不幸的是,尽管以这种方式添加了存储库,但我无法访问快照构建。Gradle不知道我在找什么。你能告诉我是否有一个可以运行的快照构建我可以尝试吗?WorkManager
2.3.2
现在可用