下载列表实现

本文探讨了在移动应用中如何有效地管理下载状态,包括本地保存下载状态的原因、手动及后台退出的应用状态处理策略,以及使用数据库进行状态记录的最佳实践。此外,还介绍了如何解决因cell重用导致的下载状态错乱问题,并提出了使用NSOperationQueue控制下载任务并发数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载状态维护:本地

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

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

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

1.手动退出: 假设处于下载中,手动退出应用。此时的下载状态应该更新为未下载(没有断点续传)。
2.后台退出同理: 长时间处于后台被系统杀死。

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

3.本地实现方案:

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

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

urlstatusdestinationUrl
http:url0文件路径

根据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


断点续传


下载进度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值