前面几篇文章可能大家也看到了,今天分析一下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