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,当出现网络异常的情况直接通过广播来手动控制暂停,网络正常才继续下载这个文件,从而减少异常情况的出现。

谢谢!

android 细数断点续传的坑相关推荐

  1. 细数Qt开发的各种坑(欢迎围观)

    1:Qt的版本多到你数都数不清,多到你开始怀疑人生.从4.6开始到5.8,从MSVC编译器到MINGW编译器,从32位到64位,从Windows到Linux到MAC.MSVC版本还必须安装对应的VS2 ...

  2. 细数sass安装中遇到的坑

    前言: 前两天打算清理电脑的时候,遇到了一点特殊的问题,打算重装一些东西,其中就有我一直用的顺手的SASS预编译工具. 但是在重装的时候,我发现我居然不会用了??? 靠,要不是我用了半年的Sass,我 ...

  3. Android 系统(266)---细数利用android系统机制的保活手段

    Android 进程常驻(2)----细数利用android系统机制的保活手段 这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权 ...

  4. android p preview_细数 Android P 开发者预览版中最不能错过的新特性

    原标题:细数 Android P 开发者预览版中最不能错过的新特性 2018年安卓巴士全球开发者论坛-重庆站 [线下活动]春天到了 跟小编一起去重庆嗨皮吧~ Android P 应用适配新特性1.Pr ...

  5. 细数原生 Android 4.2 系统的细节缺陷

    细数原生 Android 4.2 系统的细节缺陷 oschina 发布于: 2013年02月17日 (21评) 分享到  新浪微博腾讯微博 收藏+32 腾讯数码讯(编译:刘建国)早在去年十月份的时候, ...

  6. Android 进程常驻(2)----细数利用android系统机制的保活手段

    这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取root权限下,clean master获取root权限下都无法杀死进程 支持系统2.3到 ...

  7. s8 android 8.0变化,细数三星Galaxy S8升级安卓8.0系统后的那些变化,看完决定

    三星Galaxy S8大更新 日盼夜盼安卓总算8.0时代到来了,这次s8也总算迎来了安卓8.0版本的更新, 不过目前还是测试阶段,下面我们就来细数有那些变化吧 一,任务管理器点击右上角可以切换视图 二 ...

  8. 百密一疏,防不胜防,细数那些大型数据库建设过程中绕不开的坑

    构建大型数据库时,无论最开始的设计多么精妙,到后续操作的时候或多或少都会遇到一些问题,本文将来细数大型数据库中不可避免会遇到的问题. 原文标题:Feature Casualties of Large ...

  9. 年终盘点丨细数2017云栖社区20大热点话题(附100+话题清单)

    2017,你在聚能聊里分享了多少内容?贡献了多少话题?又收获了多少呢?社区聚能聊不仅可以请教技术难题,探讨热点话题,也可以八卦日常生活,分享码农们的点点滴滴. 程序员的世界不止是眼前的代码,一样有诗和 ...

最新文章

  1. 51CTO第2本书样章曝光:DHCP服务器规划与应用案例
  2. ArcGIS 基础11-专题制图
  3. Android 单元测试学习计划
  4. Spring Java配置
  5. plsql轻量版记录类型1
  6. Ant Design Vue list表格组件
  7. 连接手表_荣耀手表2 一键连接你的手上智慧新生活
  8. numpy: np.random.get_state()
  9. continue 结束本次循环,继续下一次循环
  10. Openlayers3中如何优雅的表示等值面
  11. 小程序源码:修复登录接口仿抽奖助手
  12. VRchat上传角色error无法保存蓝图解决
  13. P4学习笔记(一)初识P4
  14. Python编程基础之Python语言的基础知识(上)
  15. svn服务端删除版本库_【SVN】彻底 svn 服务器上的 删除某一个文件或文件夹
  16. 黑马MySQL进阶篇笔记
  17. 约瑟夫环问题【数组】标记法
  18. 计算机可以查到刻录光盘的记录,光盘刻录信息记录在什么位置上
  19. Python 数据结构之队列的实现
  20. 教你自制ST-LinkV2下载器

热门文章

  1. C#来创建和读取XML文档
  2. 中秋被各大厂的月饼秀到了!快和小编看看这些大厂到底发的什么月饼吧!!!不知道有没有被惊讶到的?
  3. springSecurity初步认识和执行流程
  4. 如何查找和注册已备案过期域名
  5. vue-devTools Chrome安装配置
  6. 第15.22节 PyQt(Python+Qt)入门学习:Model/View架构详解
  7. Key Points Estimation and Point InstanceSegmentation Approach for Lane Detection 论文精读
  8. unity骚操作之: 解决AVPro Video在安卓移动端播放不了SteramAssecting里面的视频 或者 URL视频
  9. 数据解压-----续赫夫曼编码
  10. 等额本金法计算贷款还款利息等详细数据