我想使用 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/