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

问题描述 投票:2回答:2

我已经在互联网上搜索有关此主题的信息,但似乎没有人再遇到此问题。

还记得这个有趣的错误吗?

java.lang.IllegalStateException:超过JobScheduler 100个作业限制。我们在JobScheduler中统计了101个WorkManager职位;我们的数据库中有50个跟踪作业;我们的配置限制为50。

with

原因:java.lang.IllegalStateException:应用程序可能无法安排100个以上的独立作业

嗯,尽管切换了许多工作来执行enqueueUniqueWork,但看来我的一些用户仍在达到该极限。 我的用例是针对那些贫困且没有连通性的人,他们离线进行大量工作,从而创造了很多工作来更新远程服务器上的资源。我从来没有遇到过FirebaseJobDispatcher这个问题(至少我没有意识到),有些人可能几天都没有信号,如果有人几个星期都无法连接怎么办?它将轻松建立数百个工作岗位。因此,此错误。

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

更新

Android版本:在7.0、8.0、8.1上得到确认,可能还有更多

WorkManager版本:2.3.0

java android android-jetpack android-workmanager
2个回答
1
投票

我们最近修复了一个错误,该错误在WorkManager跟踪JobScheduler中的作业与jobsactual状态之间不匹配。这种情况很少发生,我认为您的情况就是如此。

https://issuetracker.google.com/issues/149092520是最近报告的错误。我已在公共跟踪器上报告该错误之前修复了该错误,因为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()中进行此操作。

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


0
投票

根据异常消息,您似乎只有20个由WorkManager跟踪的WorkRequest。该问题可能是由于JobScheduler的基础实现中的错误所致,对于了解您在哪些设备/操作系统版本上遇到了这些错误非常有用。

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

最后,您能否分享您使用的是哪个WorkManager版本?

© www.soinside.com 2019 - 2024. All rights reserved.