android多线程下载模块

<strong>使用场景</strong>
apk应用内更新,其他中小文件的下载,断点续传下载等,先来看看效果图:
<br/>

<strong>简单方便的调用接口</strong>
调用者只要设置好下载路径、文件后缀,丢一个url即可开始下载,并且可以根据需要监听进度,例如:
  

FileDownloader mDownloader  = FileDownloader.getInstance(getApplication());
mDownloader.setExtend(".apk");
mDownloader.setFilePath(Environment.getExternalStorageDirectory() + "/apk/");
mDownloader.addFile("http://zhuzher.vanke.com/uip/zhuzher.apk");
mDownloader.setDownloadObserver(new DownloadObserver() {
 @Override
 public void onUpdate(String apkUrl, String file,
  int completeSize, int apkFileSize) {
    //do your thing
  }
  @Override
  public void onComplete(String file) {
   //do your thing
  }

  @Override
  public void onError(String apkUrl, int type, int state) {
                //do your thing
    }
  });

   如果你只关心使用,拿来就用,文章到这里不用往下看了,直接到我的<a href="https://github.com/liuguangli/AndroidFileDownloader">Github仓库下载源码</a>和例子吧。当然我很希望读者一起来理解下简单的实现原理。
<strong>设计与实现</strong>
多线程下载的实现,生产者消费者模式,对于设计实现层面的东西个人更喜欢用图说明,序列图如下:
 
  <strong>FileDownloader:</strong>直接面向调用者,使用者只care文件的url,下载存储路径,下载进度状态,我们致力将对外接口封装的尽量简单方便,所以仅仅提供一个addFile(),传入url,文件路径,回调监听器。
<strong>DownloaderListener:</strong>下载进度或状态监听接口,调用者实现回调方法处理进度状态。
CreatorThread:生产者线程,这个线程负责通过url获取文件大小,再将文件分片组装成下载任务段。
TaskList: 任务队列,生产者线程可以往里面增加任务段,消费者线程可以从里面取出一段下载任务,这个过程是同步的。
DownloadThread:消费者线程,负责消费任务队列里面的任务段。

GitHub账号:<a href="https://github.com/liuguangli/">https://github.com/liuguangli</a>,欢迎fork,贡献你的idea,一起做好每一件小事。

个人博客:www.liuguangli.win

时间: 2024-09-20 16:07:34

android多线程下载模块的相关文章

Android多线程下载

项目源码下载 https://github.com/Wang-Jun-Chao/AndroidProjects 多线程下载 原理:服务器CPU分配给每条线程的时间片相同,服务器带宽平均分配给每条线程,所以客户端开启的线程越多,就能抢占到更多的服务器资源 确定每条线程下载多少数据 发送http请求至下载地址 String path = URL url = new URL(path) HttpURLConnection conn = (HttpURLConnection) url() conn()

java-为什么我写的android多线程下载程序刚开始速度很快,之后越来越慢?

问题描述 为什么我写的android多线程下载程序刚开始速度很快,之后越来越慢? 我写的多线程下载程序,用了8个线程,一次读10240byte个字节. 刚开始前几s下载速度显示可以到600多k/s 但是马上就降到个位数或十几k/s 不是网络问题,因为我用别的东西下载速度都会很快. 如果我暂停后恢复又是前几s会很快,之后速度又掉下来了. 这是为什么呢??? 如何保持java下载速度,谢谢! 还有我该如何平衡线程数与一次下载字节间的关系? 解决方案 我感觉是你开启的线程 不够多的原因 供不应求

一个Android项目多线程下载模块开源库:AndroidFileDownloader

使用场景 apk应用内更新,其他中小文件的下载,断点续传下载等,先来看看效果图: 简单方便的调用接口 调用者只要设置好下载路径.文件后缀,丢一个url即可开始下载,并且可以根据需要监听进度,例如: FileDownloader mDownloader = FileDownloader.getInstance(getApplication()); mDownloader.setExtend(".apk"); mDownloader.setFilePath(Environment.getE

编写断点续传和多线程下载模块

本文配套源码 概述 在当今的网络时代,下载软件是使用最为频繁的软件之一.几年来,下载技术也在不停地发展.最原始的下载功能仅仅是个"下载"过程,即从WEB服务器上连续地读取文件.其最大的问题是,由于网络的不稳定性,一旦连接断开使得下载过程中断,就不得不全部从头再来一次. 随后,"断点续传"的概念就出来了,顾名思义,就是如果下载中断,在重新建立连接后,跳过已经下载的部分,而只下载还没有下载的部分. 无论"多线程下载"技术是否洪以容先生的发明,洪以容使

android多线程下载3

今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2次总结中已经为大家分享过有关技术的一些基本要领,我们先一起简单回顾下它的基本原理. http://blog.csdn.net/shimiso/article/details/6763664  android 多线程断点续传下载 一 http://blog.csdn.net/shimiso/article/details/6763986 

android多线程下载2

在上一集中,我们简单介绍了如何创建多任务下载,但那种还不能拿来实用,这一集我们重点通过代码为大家展示如何创建多线程断点续传下载,这在实际项目中很常用. main.xml: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&

Android多线程下载示例详解

一.概述 说到Android中的文件下载,Android API中明确要求将耗时的操作放到一个子线程中执行,文件的下载无疑是需要耗费时间的,所以要将文件的下载放到子线程中执行.下面,我们一起来实现一个Android中利用多线程下载文件的小例子. 二.服务端准备 在这个小例子中我以下载有道词典为例,在网上下载有道词典的安装包,在eclipse中新建项目web,将下载的有道词典安装包放置在WebContent目录下,并将项目发布到Tomcat中,具体如下图所示 三.Android实现 1.布局 界面

android --多线程下载

多线程下载文件的过程是:     (1)首先获得下载文件的长度,然后设置本地文件的长度.        HttpURLConnection.getContentLength();//获取下载文件的长度       RandomAccessFile file = new RandomAccessFile("QQSetup.exe","rwd");         file.setLength(filesize);//设置本地文件的长度     (2)根据文件长度和线程

android 多线程下载 显示进度 速度

http://blog.csdn.net/JianTao_Yang/article/details/8433905 功能要求:从网络下载一APK应用,显示下载速度.进度,并安装应用. 运行效果图: 工程结构图: 很简单,就一个activity,一个更新UI的线程,一个下载线程加个文件处理类 主要代码:   [java] view plaincopy /**   *多线程下载,UI更新类    *@author young   * */   public class MultiThreadDown