android 细数断点续传的坑

android项目中,不可避免会下载一些第三方应用,或者自身更新的包,或者下载视频文件,那么都会考虑用到断线续传的方式。

那么,断电续传的方式大概有3种:

1.比如下载视频的时候,调用js的方法,把文件下载下来,然后用randomAccessFile合并成一个文件。

2.如xUtils的断点续传代码,具体自己看。

3.利用sqlite,配合上randomAccessFile来实现。

第一种主要是用于下载视频,为啥呢,因为考虑到网络问题之类的,频繁的断点和续传,有概率性出现花屏等,用后面2中会出现这种问题,而前者没,而缺点是如果不会写js或者没后台工程师帮忙就不行了。

第二种和第三种的优劣性表面上可以形容为xutils的断线续传为根据文件大小就可以判断下一次的起始位置,而且下载的文件大小都可以通过eclipse中查看文件的地方看得到实时的增长。

第三种的方式可以形容为文件的大小从开始就定死了,而且会多一个数据库的调用,不考虑同步问题的话很容易出现数据库读取异常的问题,优点就是逻辑简单。

那么,坑有哪些呢?

1.网络异常,也就是自己手动断网,模拟路由或者wifi中断的情况。

xutils和randomAccessFile并没考虑到这种问题,会出现流等待网络正常才继续读取的情况,看似没事,但是实际上会大概率出现文件大小异常,拉文件出来不是解析不了就是视频花屏的情况。

2.频繁断点(几十次,10次以下概率性极小)。

xutils的情况还好。但是对于项目而言,能不使用第三方包就不用,因为实用第三方包的话不能排除第三方包有后门的问题。

而使用randomAccessFile的话,频繁断点,会有小概率的异常事件,不外乎2种:

1)文件大小异常。

2)文件解析异常。比如apk文件,正常的话可以在文件管理器看到一个有自己logo的apk,而失败会出现解析包失败,logo为android本身的logo

解决的方法很简单。

就是在进度大于等于100%时,读取当前apk文件的MD5值,也就是根据MessageDigest来获取并转换为md5值,再与网络获取的md5比较。

如果正常则打开文件,失败则直接重新下载。

当然还要看自己的具体情况来实现这个功能,下载文件大,或者文件为视频,应考虑使用项目内嵌js的方式,由js来实现暂停或者继续下载的功能,项目小可以直接考虑xutils,当出现网络异常的情况直接通过广播来手动控制暂停,网络正常才继续下载这个文件,从而减少异常情况的出现。

谢谢!

时间: 2024-12-24 12:15:58

android 细数断点续传的坑的相关文章

细数vue爬坑之路<坑路大集合>

坑爹集锦一: npm出现Newline required at end of file but not found错误 原因:以vue为后缀名的组件结尾没有换行 解决办法:在结尾后面换行..如下图 解决前: 解决后: 这样设置后,之前的页面瞬间脉动回来!!!

细数php语法里的那些“坑”

尽管PHP的语法已经很松散,写起来很“爽”.但是对于像“我们”这种学过 Java. C#的“完全面向对象程序员”来说,PHP程序设计语言里,还是有一些的坑的.下面请让我来盘点一下. Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in...... 错误原因:在PHP语法中,声明任何函数,函数名的前面需要 function 关键字. <?php //错误代码如下 class Test{ __construct

细数空格缩进在开发中的坑

没错,这是一篇火药文.网上流传的各种编程规范几乎青一色都是说用空格代替Tab,其理由几乎都是“这是唯一能保证在所有环境下获得一致展现的方法”. 那我想问一句,你们到底能要多少种环境要看代码??? 1.用Windows自带的记事本?那我只能说,你继续装,看你什么时候才能完成得了任务.2.连接到Linux服务器上使用VI或者VIM?我也只能说只有改服务器的配置文件的时候才会这样做吧,而且如果是配置文件比较复杂也是下载下来用Notepad++改清晰很多好伐,比如Aapche的配置文件在Notepad+

细数人体器官仿生,还有哪些可开发的

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 人体器官列表(后续'借'张人体图过来 -- 读书人的事情,不能叫偷,叫窃,谐个音,就叫借了) 1.眼:摄像头: 2.耳:mic: 3.口:音箱或耳

Android实现多线程断点续传

前言: 项目都快交付阶段了,客户说要改个需求,添加一个断点续传功能.在版本更新,杂志下载或者视频下载的时候实现断点续传.由于时间紧迫,想起了之前研究过一个demo代码,就直接修改使用了,根据自己的方式实现,但是核心代码没变.以后或许会用到,于是就专门写了个demo. 先看一下项目目录结构: db--->操作数据库的(创建数据库表,数据的增删改查.) util--->工具类 download--->实现下载(下载器以及自定义线程.) 这里以易信客户端的下载为例,简要介绍. String d

【转帖】鸿蒙发布,老兵戴辉为你细数一部华为操作系统28年史

鸿蒙发布,老兵戴辉为你细数一部华为操作系统28年史 https://www.ijiwei.com/html/news/newsdetail?source=pc&news_id=725007 爱集微·08-10 12:31·数码 来源: 上观新闻 一部华为发展史,也是一部可歌可泣的操作系统发展史. 8月9日,东莞松山湖沸腾的一天,华为消费者业务CEO余承东发布了鸿蒙操作系统,中文来自山海经,英文叫HarmonyOS,不是以前传说的OakOS. 余承东在介绍鸿蒙OS开发初衷时表示:“随着全场景智慧时

细数2014年成长

冬天的来临,让我的心很冷,不想动,不想思考,不想说话,今年剩下的一些日子,我想也就这样了,不会再有什么变化了.打开文档,开始记录今年,展望明年.记录是为了抛弃过去一切,又想未来某天还能拾起,所以把它尘封在笔记里.之后就可让脑中的一切随风消散,没有任何思想负担,放空的心就能接纳更多新的内容. 细数2014年的成长  成长主要在意识形态上,至于技术,越来越难静下心来学了. 1.彻底离弃网络游戏 放弃网络游戏,开始把人生当做游戏.这个游戏只有一次机会,不能死,不能走错路,每一次选择都要经过深思熟虑.和

细数AutoLayout以来UIView和UIViewController新增的相关API&lt;转写&gt;

细数AutoLayout以来UIView和UIViewController新增的相关API – UIViewController篇 UILayoutSupport @property(nonatomic,readonly,retain) id<UILayoutSupport> topLayoutGuide NS_AVAILABLE_IOS(7_0); @property(nonatomic,readonly,retain) id<UILayoutSupport> bottomLay

再回首:细数存储设备的前世今生-转

我们如何迎头赶上? 据IDC统计,今年全球数据总量将达到2.16ZB,预计将在2016年增长到3.77ZB.随着数据量的不断增长,对数据存储的要求也越来越高,不过无须担心,相关的存储技术也已经迎头赶上. 数据存储技术是发展最快的电子技术.磁带,硬盘和固态硬盘的容量大约以每12到18个月就会增加一倍. 如今的台式机硬盘容量已经高达4TB~5TB.这足以装下1万张照片或562小时的高清视频.希捷表示,到2020年热辅助磁记录技术(HAMR)会带来60TB硬盘,这一容量足以存储12万张照片或6750小