Git Product home page Git Product logo

fkdownloader's People

Contributors

syfh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fkdownloader's Issues

url.encodeEscapedString 下载错误

我这边测试发现一些请求地址先编码后会请求错误,去掉编码后可以正常请求成功。不知道这个操作是否必须?

FKMessager 监听有时会出现监听不被移除的问题

设备型号:iPhone7 Plus
系统版本:12.4.1
操作步骤:运行Demo,下载一个文件,进入下载管理页面,等待下载完成,完全退出Demo,再次运行Demo,直接打开下载管理页面。
期望结果: FKMessager messagerWithURL的监听回调只执行一次然后就移除监听,并且不在回调
运行结果:监听不会被移除,并且该Block代码块一直在被执行
您的代码:您的Demo,什么都没有改
报错信息:
image

restory 报错

image

下载中强制重启app,- (void)restore:(NSURLSessionDownloadTask *)task 方法中,self.resumeData 为 nil 时会报错

pod版本 FKDownloader (0.1.3) 求助

设备型号:iPhone6s Plus
系统版本:12.3.1
操作步骤:
收到长链接推送后添加下载任务。
期望结果:
能够按照给定的最大并发书数(3)以队列方式逐个完成下载。
运行结果:任务卡住,当正在执行的任务数量超过给定个数时提示超过最大并发数(貌似好像给定一个无法解析的链接进去的时候也不会报错,不返回结果,怀疑卡住和中间传入过错误链接有关系。)
您的代码:
didFinishLaunchingWithOptions中调用下面的方法
image
收到长链接推送后添加并开始任务的相关代码
image
后台下载处理
image
报错信息:(控制台输出)
image

task 定时器问题

image

当 task 重建定时器时,有概率会出现这个 crash ,有时是上面这里,有时是下面

dispatch_source_cancel(self.timer);

一个task

设备型号:
系统版本:
操作步骤:
期望结果:
运行结果:
您的代码:

demo 不能正常下载,进度不显示, 急!!!

设备型号: iPhone 6S
系统版本: 10.3.3
操作步骤: 先运行demo到手机, 然后手机设置低电量模式并拔下数据线,打开demo
期望结果: 能正常下载
运行结果: 点击“开始”按钮已变为“暂停”(说明为正在下载中),但无进度条显示, 取消低电量模式或者数据线连接电脑就能正常下载
您的代码: demo原代码

切换一组任务的暂停/恢复任务的状态的问题

切换一组任务的暂停/恢复任务几次后,其中的单个任务下载完成后执行下一个任务时会没有任何响应,不会响应下载的回调,也不会出错。操作一次就能下载成功一个任务,但下一个不会自动开始。

暂停

[[[FKDownloadManager manager] acquireWithTag:xx] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
                    [[FKDownloadManager manager] suspend:obj.url];
                }];

恢复

[[[FKDownloadManager manager] acquireWithTag:xx] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
                    [[FKDownloadManager manager] resume:obj.url];
                }];

不能实现断点下载,暂停之后会从头开始下载

设备型号:iPhone 7
系统版本: 12+
操作步骤:使用http://d30.xcenable.com/storage/attachment/2019/8/14/4f9516f08b134a0c81a7c68247580a0f.mp4 下载视频,
期望结果:实现断点下载
运行结果:不能实现断点下载,暂停之后继续点击下载,会从头开始下载
您的代码:
image

报错信息:我测试了下载发现我们公司的服务器下的资源都是这种情况,这两个方法 cancelByProducingResumeData 和 didCompleteWithError 里面的取的resumedata都为nil,不知道是什么原因

task.isFinish 的 progress 的建议

- (void)reday {
    FKLog(@"开始准备: %@", self)
    
    if (self.isFinish) {
        self.progress.totalUnitCount = 1;
        [self sendFinishInfo];
        return;
    }
...

当 task 的文件已经完成时,建议将文件的大小作为 progress 的 totalUnitCount

功能优化

有个需求该项目能否满足,或者提供下思路,就是下载顺序问题,按加入顺序进行依次下载,还有个开始时间和结束时间能否满足

URL 重定向问题

当访问一个地址,比如: www.xx.com/1.mp4 ,但是它的真实地址可能是: www.yy.com/1.mp4。由于是通过 url.identifier 来确定任务的,在 urlsession 的回调的时候获取task.currentRequest.URL.absoluteString 会得到后面的地址从而找不到该任务从而下载失败。

崩溃

设备型号:iPhone 6
系统版本:10.2
操作步骤:运行demo,点击下载,再点击暂停,再点击取消
期望结果:正常
运行结果:崩溃
您的代码:无
19510f20-cd8a-4307-92af-76c3d91d504d

多目录

怎么实现同时下载多个视频,但是这些视频的存储目录为不同的文件夹

请求过多造成主线程卡顿

  1. 一次添加比如100个 task,不停的归档会造成主线程卡死,直到所有任务添加完成。
  2. 且开始执行任务后,执行过程中有明显卡顿。
  3. groupProgress 计算错误,过多的 task 中,有时会往回跳。比如:0.5->0.55->0.2->0.6 这种。

addedBlock 赋值问题

[[FKDownloadManager manager] addTasksWithArray:tasks tag:""];
[FKDownloadManager manager].addedBlock = ^{
           //
};

当执行较少的任务时,这样使用会存在 block 还未赋值的问题。虽然将赋值放在前面能解决,建议可以添加对一组任务操作的状态同步。

另外非常感谢,目前使用这个库已经满足我 MP4 和 M3U8 的下载需求了。

任务不执行

使用最新版本

 [[FKDownloadManager manager] addTasksWithArray:array tag:strtag];  // 全部添加
            [[FKDownloadManager manager] startWithTag:strtag];                 //按标签启动

最后只下载了五六个,看taskhub里其它任务均为等待状态 ,但看fklog输出为

FKDownloadManager.m:258	开始执行 FKTask: <FKTask: 0x6000029a57a0>.<711>.<TaskStatusNone>.<https://ese2a2b9c8d9cb-pub.pubssl.ss.net/22989/42fcc57b3ec347e6b20ad023c28f967e/lgjOnsNjII53qVF8-sd_seg_62_ehls_a2f3bc?schoolId=22989&fileGlobalId=42fcc57b3ec347e6b20ad023c28f967e&userId=1&userName=%E9%A2%86%E5%B8%A6%E5%90%9B1>.<0.0000>
FKDownloadManager.m:265	当前执行数量 3 已超过 3

没有执行的任务均输出了上面的日志,但是后续并没有执行,检查整个日志都 没有执行过startNextIdleTask函数

谢谢

task 下载完成后删除任务崩溃

当我添加一组任务,全部下载完成后我想清除这些任务,因为自己另外做了汇总的存储,同时也避免 task 中的任务过多。我在 didFinishTask 的回调中判断这组任务的数量是否全部下载完成,然后调用:

[[[FKDownloadManager manager] acquireWithTag:targetId] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
                    [[FKDownloadManager manager] remove:obj.url];
                }];

并开始下一组任务,这样操作好像是不安全的,我已遇到过两种错误(一定概率下):
image
还有一种:
[FKTask retain]: message sent to deallocated instance 0x2812dcd20

Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"

当我在下载中强制退出app,不是后台。然后再重启 app 的时候,就会报这个错误

Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSErrorFailingURLStringKey=http://61.184.206.158/9bcd3aa274db88c3bf9213c80fba82fd.ts?ts_name=1&k=36f50601c365b2ff9e341757a80f8d8a-93fb-1544440233&vvid=d1db0cad-271f-af54-6663-1508bcde8dee&type=mpptv.wp&bppcataid=9&segment=1f62a124_1f624b44_1544425833, NSErrorFailingURLKey=http://61.184.206.158/9bcd3aa274db88c3bf9213c80fba82fd.ts?ts_name=1&k=36f50601c365b2ff9e341757a80f8d8a-93fb-1544440233&vvid=d1db0cad-271f-af54-6663-1508bcde8dee&type=mpptv.wp&bppcataid=9&segment=1f62a124_1f624b44_1544425833, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "BackgroundDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>",
    "LocalDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>"
), _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>}

再之后,无论怎么操作都不会下载成功了。

通过 task 直接取 tags 没有值

sorry,又来提 bug 了。
直接通过 task.tags 取值为空

    NSMutableSet *subtract = [NSMutableSet setWithSet:self.tags];
    [subtract subtractSet:tags];
    if (subtract.count > 0) {
        [self.tags unionSet:tags];
    }

断点查看,这里好像没有添加进去。

addTasksWithArray 后不能立即执行开始任务

    [[FKDownloadManager manager] addTasksWithArray:tasks.copy];
    // 第一次会取不到值
    [[FKDownloadManager manager].taskHub.allTask orderEach:^(FKTask *task, NSUInteger idx) {
        [[FKDownloadManager manager] start:task.url];
    }];

当添加一组任务后立即调用开始任务,taskHub 中会返回一个空数组。

支持多种下载任务列表管理

正打算自己写一个,发现你的这个框架,可以节省不少工作
想问一下你这边如对多种任务下载队列进行管理呢,比如我一个app里面,既有电影下载,又有音乐下载,这是两种不同的任务,都需要后台下载

运用大侠库的时候 crash, 求解决,万分感谢!!!

设备型号:iPhone
系统版本:13。5.1
操作步骤:demo 运行 资源列表 添加下载任务 添加了一屏幕多点 就是使得列表可以滑动 不管是在下载中还是下载完后 下载管理中上下多滑几次就会crash 必现
期望结果:由于项目中用到了大侠的库,求解决,万分感谢
运行结果:
您的代码:
报错信息:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <NSConcreteMapTable: 0x102613a10> was mutated while being enumerated.'

downloader.restore size 为零

设备型号:ipone 8s plus
系统版本: 12.1.2
操作步骤: 下载文件downloader.restore 获取size = 0
期望结果: 不为零
运行结果:
您的代码: kf demo

task 暂停状态不正确

调用 task 的 suspend 方法没有调用 sendSuspendInfo 方法将 status 置为 TaskStatusSuspend ,会导致在有任务是强制重启 restore 方法报错

image

task 过多主线程卡顿

当添加很多 task(没办法,M3U8列表的下载一次下载至少200个请求地址)

[[FKDownloadManager manager].taskHub.allTask orderEach:^(FKTask *task, NSUInteger idx) {
        [[FKDownloadManager manager] start:task.url];
    }];

遍历执行 start 方法后

image

由于这里将 task 返回到了主线程,过多的 task 会造成界面卡顿。

文件可能重名问题

如果不指定 task 的 filename,使用 url.lastPathComponent 作为文件名时,可能存在 url 不同,但是文件名相同的问题。

时效性验证设置为可选项

有的一组下载链接是通过参数来区别文件的,如果忽略参数设置 identifier 会导致这类任务无法添加。建议对该选项提供 configure 和 task 的设置。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.