public interface HttpDownloader {
public void setDownloadManager(HttpDownloadManager manager);
public HttpDownloadManager getDownloadManager();
public void executeAction();
}
public class MyAsyncTask extends AsyncTask<String, Void, Bitmap> implements HttpDownloader{
private HttpDownloadManager httpDownloadManager;
protected Bitmap doInBackground(String... params) {
httpDownloadManager.downloadStarted();
...
}
protected void onPostExecute(Bitmap bitmap) {
httpDownloadManager.downloadCompleted();
...
}
public void setDownloadManager(HttpDownloadManager httpDownloadManager){
this.httpDownloadManager = httpDownloadManager;
}
public HttpDownloadManager getDownloadManager(){
return httpDownloadManager
}
public void executeAction(){
this.execute();
}
}
public class HttpDownloadManager{
private LinkedList<HttpDownloader> tasks = new LinkedList<HttpDownloader>();
private int mMaxTaskNumber = 1;
private int mActiveTaskNumber = 0;
private boolean isRunning = false;
private ExectorService mService = Executors.newSingleThreadExecutor(); public HttpDownloadManager() { } public void addTask(HttpDownloader task) {
try{
task.setDownloadManager(this);
tasks.offer(task);
} catch (Exception e) {
e.printStackTrace();
}
if (!isRunning && !mService.isShutdown()) {
mService.submit(new DoTask());
}
} public void deleteTasks() {
tasks.clear();
} public void destroy() {
if (!mService.isShutdown) {
mService.shutdown();
}
} public final void setMaxTaskNumber(int maxTaskNumber) {
mMaxTaskNumber = maxTaskNumber;
} public void downloadStarted() {
mActiveTaskNumber++;
} public void downloadCompleted() {
mActiveTaskNumber--;
} public boolean isAvailable() {
if (mActiveTaskNumber <= mMaxTaskNumber) {
return true;
} else {
return false;
}
} private class DoTask implements Runnable {
public void run() {
isRunning = true;
while(!tasks.isEmpty()) {
if (HttpDownloadManager.this.isAvailable()) {
HttpDownloader task = tasks.poll();
task.executeAction();
}
}
isRunning = false;
}
}
}

Android之下载管理者的更多相关文章

  1. android sdk下载

    android sdk下载 所有的离线包都有 http://mirrors.neusoft.edu.cn/android/repository/

  2. Android Studio下载及使用教程(转载)

    (一)下载及相关问题解决: Android Studio 下载地址,目前最新可下载地址,尽量使用下载工具. Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却 ...

  3. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  4. android程序---->android多线程下载(一)

    多线程下载是加快下载速度的一种方式,通过开启多个线程去执行一个任务,可以使任务的执行速度变快.多线程的任务下载时常都会使用得到断点续传下载,就是我们在一次下载未结束时退出下载,第二次下载时会接着第一次 ...

  5. Android Studio下载与安装

    Android Studio下载与安装 1 2 3 4 5 分步阅读 百度经验:jingyan.baidu.com 自从Google宣布Android Studio将取代Eclipse,正式成为官方集 ...

  6. 曲线救国,解决Mac系统下,Android sdk下载失败的问题

    Mac下翻_墙的问题 话说GFW屏蔽谷歌已经有一阵子了,最近打算在Mac系统下折腾个Android应用,备好了IDE,只欠SDK,无奈下载时因为GFW的缘故,总是失败,我心痛哉! 由于本人偏爱Mac系 ...

  7. Android异步下载图片并且缓存图片到本地

    Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...

  8. Android源代码下载方法具体解释

    作者:张星 相信非常多下载过内核的人都对这个非常熟悉 git clone git://android.git.kernel.org/kernel/common.git kernel 可是这是在曾经,如 ...

  9. Android Studio下载及离线升级方法

    由于众所周知的原因,android官网无法访问,所以我们要用到翻.墙.工具,我用的是自.由.门,大家自行搜索下载. android studio下载地址: https://dl.google.com/ ...

随机推荐

  1. Spring MVC过滤器-字符集过滤器(CharacterEncodingFilter)

    spring的字符集过滤通过用于处理项目中的乱码问题,该过滤器位于org.springframework.web.filter包中,指向类CharacterEncodingFilter,Charact ...

  2. RestTemplate实践

    什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效 ...

  3. 延迟加载图片插件LazyLoad.js的使用方法

    我们常常会见到很多网页的图片并不是一打开页面就全部加载的,而是浏览到当前的图片位置才显示出来.这是怎么实现出来的呢? 其实这就是目前较为流行的“延迟加载”(Lazy Load)技术,灵感来自Matt ...

  4. webkit内核浏览器的CSS写法

    -webkit-tap-highlight-color: transparent; Mobile上点击链接高亮的时候设置颜色为透明 -webkit-user-select: none; 设置为无法选择 ...

  5. .net 文件下载【转】

    方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件.     protected void Button1_Click(object send ...

  6. Excel报表开发

    读取Excel数据 /// <summary> /// 封装方法 /// </summary> /// <param name="path">& ...

  7. Yii源码阅读笔记(二十四)

    Module类中获取子模块,注册子模块,实例化控制器,根据路由运行指定控制器方法的注释: /** * Retrieves the child module of the specified ID. * ...

  8. MVC应用程序中,怎样控制与复制相同的功能

    先看此篇<MVC程序实现Autocomplete功能> http://www.cnblogs.com/insus/p/3546255.html 它是实现使用jQuery实现文本框输入文字, ...

  9. book

    http://www.ed2000.com/ShowFile.asp?FileID=61391 e-itbook.com

  10. phpexcel 内存溢出 优化

    最近我们公司的项目的在导出excel的时候偶尔出现内存溢出错误,经过测试发现当数据量大于5000条就出现这个问题(默认php.ini memory 是128M) Allowed memory size ...