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. poj 2239 二分图最大匹配,基础题

    1.poj 2239   Selecting Courses   二分图最大匹配问题 2.总结:看到一个题解,直接用三维数组做的,很巧妙,很暴力.. 题意:N种课,给出时间,每种课在星期几的第几节课上 ...

  2. Mysql bench执行sql语句批量操作数据所遇到的问题

    一.错误 rror Code: 1175. You are using safe update mode and you tried to update a table without a WHERE ...

  3. Linux_文件及文件夹[创建][复制][移动][删除][重命名]

    一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语   法: touch [-acfm][-d <日期时间>][-r <参考文件或目 录&g ...

  4. 使用 GCC 调试程序

    系统 Ubuntu 调试示例: #include <stdio.h> int func(int n) { ,i; ;i<n;i++) { sum+=i; } return sum; ...

  5. uva705--slash maze

    /*这道题我原本是将斜线迷宫扩大为原来的两倍,但是在这种情况下对于在斜的方向上的搜索会变的较容易出错,所以参考了别人的思路后将迷宫扩展为原来的3倍,这样就变成一般的迷宫问题了*/ #include&q ...

  6. Another app is currently holding the yum lock; waiting for it to exit...

    刚安装完虚拟机,用xshell连接上linux后,安装程序时一直出现这个信息Another app is currently holding the yum lock; waiting for it ...

  7. 字典树(Trie Tree)

    在图示中,键标注在节点中,值标注在节点之下.每一个完整的英文单词对应一个特定的整数.Trie 可以看作是一个确定有限状态自动机,尽管边上的符号一般是隐含在分支的顺序中的.键不需要被显式地保存在节点中. ...

  8. 杭电ACM 1196

    #include<stdio.h>int main(){ int num,j,k,s,f; int a[7]={0,0,0,0,0,0,0}; while(scanf("%d&q ...

  9. IOS第七天(2:UiTableView 加上数据分离)

    ****加上数据分离 #import "HMViewController.h" #import "HMStudent.h" @interface HMViewC ...

  10. 【转】java开源类库pinyin4j的使用

    最近CMS系统为了增加查询的匹配率,需要增加拼音检索字段,在网上找到了pinyin4j的java开源类库,提供中文转汉语拼音(并且支持多音字), 呵呵,看了看他的demo,决定就用它了,因为我在实际使 ...