java - WorkManager 用于长网络连接?

标签 java android networking android-workmanager

我想使用 WorkManager 从 Web 下载文件,但我对 JobScheduler 的限制感到难过 - 工作时间为 10 分钟。也许还有其他方法或者您必须使用前台服务?

最佳答案

我还没有听说过对工作/工作本身强加任何 10 分钟的窗口,但是我确实在 Power management restrictions 中找到了对工作的 10 分钟限制的引用。 :

If jobs restrictions are in force, the app is granted a window of ten minutes at the specified interval. At the end of the ten minutes, all jobs are postponed until the next window.

这并不能真正告诉我们,如果作业仍在 10 分钟标记处执行,会发生什么,但是,我建议,如果您的工作花费超过 10 分钟,您应该以不同的方式构建它。

第一件事是为每个需要下载的文件安排新的工作。您可能不应该尝试一次下载所有文件。如果您需要保证某些文件按特定顺序下载,请考虑构建 chain不同的下载任务。这一策略还有两大好处:如果一个文件下载失败,您可以重新安排该文件下载,而不是重新安排您可能已经下载的所有 X 文件,并且 - 根据电源管理文档 - 所有尚未下载的文件尚未下载的内容将被推迟到下一个 10 分钟窗口。

其次,如果任何给定文件的下载时间超过 10 分钟,或者考虑到文件的大小,这种情况很可能发生,那么您应该查看 range requests这样您就可以将文件的部分内容保存到磁盘,并且每次您的工作达到 10 分钟限制时,您都可以重试或重新安排更多工作以在未来的窗口中继续下载。

最后,我会认真质疑您的业务逻辑是否要求应​​用程序在电池限制适用时执行如此多的工作。最好指定这种工作必须在充电时执行,或者至少在不处于打瞌睡模式(非空闲)时执行,以便完全避免这个 10 分钟的窗口。

希望这个答案有帮助!

关于java - WorkManager 用于长网络连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53029866/

相关文章:

java - 导入 spring 配置并排除过滤器

java - 无法将证书链加载到 Java keystore

java - 在不同的类中使用Android canvas,调试崩溃错误

http - 浏览器如何检测哪个 HTTP 响应是他们的?

c# - 如何获取通过网络共享身份验证的用户的用户名

networking - 在Icecast中将自定义标题添加到注销

java - 读取非常大的图像时 ImageIO.read(FileInputStream) 返回 null

java - 如何拖动 JavaFX 节点并检测 JavaFX Windows 之外的放置事件?

android - 在 Android 中进行反向地理编码的最佳方法是什么

android - 如何检查 API 级别 23 下的权限?