用于长网络连接的 WorkManager?
WorkManager for long network connection?
我想使用 WorkManager 从 Web 下载文件,但我对 JobScheduler 的限制感到难过 - 10 分钟才能工作。也许有其他方法或者您必须使用前台服务?
我还没有听说 Work/Jobs 本身有任何 10 分钟 windows 的限制,但是我确实在 Power management restrictions:
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 分钟 window。
其次,如果任何给定文件的下载时间超过 10 分钟,或者考虑到您的文件大小,这种情况很有可能发生,那么您应该查看 range requests 以便您可以保存部分文件文件到磁盘,每次您的工作达到 10 分钟限制时,您可以重试或重新安排更多工作以在以后继续下载 window。
最后,我要严肃地质疑您的业务逻辑是否需要应用在电池限制适用的情况下做这么多工作。最好指定这种工作必须在充电时执行,或者至少在不处于打瞌睡模式(不空闲)时执行,以避免这 10 分钟 window。
希望这个回答对您有所帮助!
我想使用 WorkManager 从 Web 下载文件,但我对 JobScheduler 的限制感到难过 - 10 分钟才能工作。也许有其他方法或者您必须使用前台服务?
我还没有听说 Work/Jobs 本身有任何 10 分钟 windows 的限制,但是我确实在 Power management restrictions:
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 分钟 window。
其次,如果任何给定文件的下载时间超过 10 分钟,或者考虑到您的文件大小,这种情况很有可能发生,那么您应该查看 range requests 以便您可以保存部分文件文件到磁盘,每次您的工作达到 10 分钟限制时,您可以重试或重新安排更多工作以在以后继续下载 window。
最后,我要严肃地质疑您的业务逻辑是否需要应用在电池限制适用的情况下做这么多工作。最好指定这种工作必须在充电时执行,或者至少在不处于打瞌睡模式(不空闲)时执行,以避免这 10 分钟 window。
希望这个回答对您有所帮助!