workmanager在达到jobscheduler限制100之后对作业做了什么?

jtoj6r0c  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(570)

我已经在网上搜索了关于这个问题的信息,但是似乎没有人再遇到这个问题了。
还记得这个有趣的错误吗?
java.lang.illegalstateexception:超出jobscheduler 100作业限制。我们统计了jobscheduler中101个workmanager作业;我们有50个跟踪工作在我们的数据库;我们的配置限制是50。
具有
原因:java.lang.illegalstateexception:应用程序不能调度超过100个不同的作业
尽管换了很多工作 enqueueUniqueWork ,看来我的一些用户仍在达到这个极限。我的用例适用于那些连接性差且没有连接的人,他们在离线时做很多事情,从而创建了很多工作来更新远程服务器上的资源。我在firebasejobdispatcher上从来没有遇到过这个问题(至少我没有意识到),有些人可能好几天都没有信号,如果有人几个星期都无法连接会怎么样?它将很容易建立数百个工作岗位。因此,这个错误。
我的问题是,当达到极限时,这些工作会发生什么?它们只是被调度程序丢弃了吗?我打字的时候会丢失别人的数据吗?
更新
android版本:在7.0,8.0,8.1上确认,可能更多
workmanager版本:2.3.0

c2e8gylq

c2e8gylq1#

我们最近修复了一个bug,其中 WorkManager 他正在跟踪 JobScheduler 以及 jobs . 这种情况在非常罕见的情况下发生,我想这就是你的情况。
https://issuetracker.google.com/issues/149092520 是最近报道的一个错误。我在公共追踪器上报告bug之前修复了它,因为谷歌的一个应用程序遇到了同一个edge案例。
这种变化(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() 在应用程序子类中。
如果您需要更多帮助,请随时联系bug追踪器,我可以帮助您。

cx6n0qe3

cx6n0qe32#

从异常消息中,似乎workmanager只跟踪了20个workrequest。这个问题可能是由于jobscheduler的底层实现中的一个bug造成的,了解您在哪个设备/操作系统版本上看到这些错误将非常有用。
此外,100个作业的限制是每个应用程序的,并且不限于workmanager的使用。如果在您的应用程序(或sdk中包括)中直接使用jobscheduler,这可能有助于达到100个作业的限制。
最后,您能分享一下您使用的workmanager版本吗?

相关问题