我想使用WorkManager从Web下载文件,但是JobScheduler的限制让我感到非常遗憾-工作时间为10分钟。也许有其他方法,或者您必须使用前台服务?
答案 0 :(得分:0)
我还没有听说过对工作/工作本身施加10分钟的窗口,但是我确实在Power management restrictions中找到了对工作限制10分钟的引用:
如果作业限制生效,则会在指定的时间间隔内向应用授予10分钟的窗口。十分钟结束时,所有作业都被推迟到下一个窗口。
这并没有真正告诉我们,如果工作仍在那10分钟标记处执行,会发生什么,但是,我建议,如果您的工作超过10分钟,则应该以不同的方式构造它。
第一件事是为每个需要下载的文件安排新工作。您可能不应该尝试一次下载所有文件。如果需要保证某些文件以特定顺序下载,请考虑构建chain的不同下载任务。该策略还有两个好处:如果一个文件下载失败,则可以重新安排该文件的下载时间,而不是重新安排到那时可能已经下载的所有X文件;并且-根据电源管理文档-然后重新安排所有尚未下载的文件。下载的内容将被推迟到下一个10分钟的窗口。
第二,如果任何给定文件的下载时间超过10分钟,或者考虑到文件的大小,很有可能会出现这种情况,那么您应该查看range requests,以便可以将文件的一部分保存到磁盘,并且每次工作超过10分钟时,您都可以重试或重新安排更多工作,以在以后的窗口中继续下载。
最后,我会严重质疑您的业务逻辑是否需要应用电池限制时应用程序做很多工作。最好指定这种工作必须在充电时执行,或者至少在不处于打ze模式(非空闲)时执行,以便完全避免这10分钟的时间。
希望这个答案有帮助!