Android Download 下载功能深入研究(四) : 系统应用DownloadProvider的改进

本文深入探讨了Android系统DownloadProvider的改进,尤其是针对DownloadThread的下载和存储优化。通过设置缓冲区并适时写入文件,实现在1M文件大小时一次性写入,观察到在不同网络和设备条件下,速度提升可达10%-20%。同时指出,虽然FileOutputStream比RandomAccessFile写入速度快,但多线程下载可能需要RandomAccessFile的seek功能。
摘要由CSDN通过智能技术生成

前面几篇文章可能大家也看到了,今天分析一下DownloadProvider的改进方面的探索.

DownloadProvider是系统的下载模块,位置在源代码的packages/providers/DownloadProvider下面.真正的代码部分在src/com/android/providers/downloads下面.

这个代码的下载逻辑十分推荐大家去看一下,功能健全,对于文件的存储,管理非常不错.下载功能也做的很完善,暂停,继续,停止,等待 等逻辑也非常值得我们学习.

系统DownloadProvider中,主要负责下载,保存文件的类是DownloadThread.java,我们对于DownloadProvider的主要改进,也是基于DownloadThread中的下载和存储进行的优化.

其中重要的三行代码writeDataToDestination(state, data, bytesRead, out);
state.mCurrentBytes += bytesRead;
reportProgress(state);

第一行,将httpUrlConnection中获取到的字节数据,写入FileOutputStream

第二行,记录写入的总字节数

第三行,更新状态

一次http请求获取到的数据一般最多可以获取2048 byte,我们可以设置一个mFileBuf = 1 * 1024 * 1024 (也就是1M),先把每次获取的数据包,存入这个mFileBuf,当mFileBuf达到1M的时候,一次性写入文件.经测试,这样会省下好多时间,下面贴出关键代码:

private void writeToFileBuffer(long readLength){
        if (readLength <= 0) {
            return;
        }
        mFileBuf.put(buffer.array(), 0, (int) readL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值