-
Notifications
You must be signed in to change notification settings - Fork 385
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
批量下载怎么获取总进度? #34
Comments
这个已经是总进度,你可以对比单个任务的大小和总任务的大小 |
@Danie1s 好的,我又验证了一次,确实是,不好意思哈。 非常感谢 👍 👍 👍 |
@Danie1s 总体来看,我每一组任务都创建一个 TRManager 来管理,就可以符合这个需求了。 不过现在的问题是,想要后台下载,根据你文档中的提示,必须在 appdelegate 写以下代码 // 必须实现此方法,并且把identifier对应的completionHandler保存起来
func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
let downloadManagers = [TRManager.default, downloadManager2, downloadManager3, downloadManager4]
downloadManagers.forEach { (manager) in
if identifier == manager.identifier {
manager.completionHandler = completionHandler
}
}
} 可是 app 启动的时候根本不知道到底有多少组任务,只有用户触发了,才开启下载;所以现在看来是不是没有办法解决? |
你这个需求确实不好实现,我想到两种办法。
|
其实我们公司之前就是把文件搞成zip包一起下载的,后来因为一些问题故意拆开的。 所以我选择第2种方案,那么我只需要记录一下每一个正在下载manager的identifier就可以了,然后启动的时候直接根据identifier创建,对吧? |
给AppDelegate添加一个managers数组,用户触发下载的时候,创建manager,同时添加到managers数组,把identifier保存到沙盒的文件里 在didFinishLaunchingWithOptions方法读沙盒的文件,根据identifier创建manager,同时添加到managers数组,在handleEventsForBackgroundURLSession里就可以拿到对应的manager。 |
哥们儿,我按照你说的方式做了,目前看来下载文件是可行的,没有问题 不过现在有个新的问题,就是调用批量下载方法,当文件达到一百多个的时候,也就是 URLStrings 里面有一百多个的时候,这个方法会阻塞主线 downloadManager?.multiDownload(URLStrings) 并且进度回调也不对了,从 Log 中可以看到,进度第一次回调的时候 已经是总进度0.5以上,然后接着总进度的回调又变成了0.3,0.4 等,总之不对(按理说应该越来越大) 以上结果我是用你的这个Demo 测试的,只是修改了 不过这100多个文件加起来一共40多m,也就意味着每个文件都比较小,所以下载很快,是不是因为这个问题导致回调进度不对呢? |
加我QQ联系:176516837 |
我按照这样的方法进行下载,实际上获取的进度,实际是单个任务的进度
The text was updated successfully, but these errors were encountered: