美文网首页
下载列表实现

下载列表实现

作者: 小小志伟 | 来源:发表于2018-10-16 09:49 被阅读0次

    下载状态维护:本地

    1.为什么本地保存下载状态。

    因为本地文件被删除,服务器是不知道的,所以无法记录。(安卓是可以从文件夹删除)

    2.手动退出和后台退出造成异常。

    1.手动退出: 假设处于下载中,手动退出应用。此时的下载状态应该更新为未下载(没有断点续传)。

    2.后台退出同理: 长时间处于后台被系统杀死。

    解决法案:1.通过appDelegate回调监听捕捉事件。
    2.在app启动时候,数据初始化。

    3.本地实现方案:

    本地存储方案:1.数据库。
    2.key-value

    最佳解决方案:使用数据库:下载url-> 下载状态->本地存储文件路径。

    对应表结构:

    url status destinationUrl
    http:url 0 文件路径

    根据url找到对应下载状态,并且取到下载路径内容。


    UI的更新:Cell的改变

    1.cell重用导致下载状态错乱。

    因为重用机制:cell上的下载状态会错乱。
    例子:屏幕未出现的cell状态:未下载。屏幕第一条数据是下载中。cell重用,造成屏幕未出现的cell状态错乱为下载中。所以必须从model中时时更新。

    2.cell下载状态:第一次初始化和下载点击。

    既然用本地数据记录,就要第一次从数据库拿到初始数据。
    既然用cell重用,就要保证model中数据更新(内存中)。
    造成问题:model数据来自网络,下载状态数据来自本地。

    解决方案:下载状态的更新统一来自model的数据,可以为model添加一个字段status。第一次网络获取model时候,从本地拿到状态为model赋值。当点击下载时候,根据下载情况,更新对应model的status。并监听model的status,更新cell的界面变化。


    并发数的控制

    1.NSOperationQuene

    Quene有属性maxConcurrentOperationCount最大并发数控制。
    注意:只需保证NSOperationQuene初始化一次。

    NSOperationQuene的理解:可以看作一条管道,每个操作看作一段水流。(遵循先入先出原则);并发数的控制类似蓄水池。
    1.并发数为1:蓄水池有一个管子(NSOperationQuene)流入水池。只有一个水管(并发数的控制)流出水。此时只开启一个异步线程。
    2.并发数为10:蓄水池有一个管子(NSOperationQuene)流入水池。同时10个水管(并发数的控制)流出水。此时开启10个异步线程。

    下边是还没来得及实现:

    2.GCD


    断点续传


    下载进度

    相关文章

      网友评论

          本文标题:下载列表实现

          本文链接:https://www.haomeiwen.com/subject/pkmczftx.html