Android之下载管理者

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之下载管理者

时间: 2024-10-11 04:06:55

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

Android 4.4环境搭建——Android SDK下载与安装

学习开发Android应用程序,须要下载安装Android SDK.在Android的官方站点的二级域名http://developer.android.com/index.html中.能够下载到完整版本号的Android SDK,也能够下载到包括开发工具(带ADT插件的Eclipse)的最新版本号的Android SDK.在以下将具体介绍包括开发工具的最新版本号的Android SDK下载与安装的步骤. &  说明:在完整版本号的AndroidSDK中,包括了模拟器.教程.API文档.演示样例

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

1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

使用Android studio下载github上的工程及问题解决 2015-06-03 16:39:44

使用Android studio下载github上的工程及问题解决 2015-06-03 16:39:44 http://blog.chinaunix.net/uid-20771867-id-5066613.html 分类: Android平台 Android studio内置了github的插件,可以直接下载github上的工程,感觉好爽啊.具体怎么做呢?     1.如图所示操作,如果是初次使用会提示输入用户名密码.      2.等android studio读取到你github里面的工程

打开SDK Manager检查Android SDK下载和更新失败的解决方法

[故障描述] 打开SDK Manager检查Android  SDK状况,出现以下情况: Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connection to https://dl-ssl.google.com refused Failed to fetch URL https://dl-ssl.google.com/android/repository/

最新Android Studio下载

此文写给那些无法正常访问http://developer.android.com/网站,又想下载在Android Studio的朋友.因为Android开发者网站设在国外,所以如果你的电脑不翻墙的话是无法正常访问的,为了能让国内的朋友下载到Android Studio,小编这里特意把Android Studio从http://developer.android.com下载下来,然后传到了百度云上.需要的朋友可以从下面的地址下载:链接:http://pan.baidu.com/s/1i3AEanr

Android Studio 下载地址

下载地址:https://developer.android.com/sdk/index.html#download      这个网址可以下载需要的东西,翻墙的话可以给 [email protected] 发一个邮件(内容任意),自动回复里面有FQ软件的下载地址. Android Studio 下载地址,布布扣,bubuko.com

Qt on Android: http下载与Json解析

百度提供有查询 ip 归属地的开放接口,当你在搜索框中输入一个 ip 地址进行搜索,就会打开由 ip138 提供的百度框应用,你可以在框内直接输入 ip 地址查询.我查看了页面请求,提取出查询 ip 归属地的接口,据此使用 Qt 写了个简单的 ip 归属地查询应用.可以在电脑和 Android 手机上运行.这里使用了百度 API ,特此声明,仅可作为演示使用,不能用作商业目的. 版权所有 foruok,转载请注明出处( http://blog.csdn.net/foruok ). 这个例子会用到

毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.io/picasso/ 我们在上篇OkHttp的时候说过这个Picasso,学名毕加索,是Square公司开源的一个Android图形缓存库,而且使用起来也是非常的简单,只要一行代码就轻松搞定了,你会问,为什么不介绍一下Glide?其实Glide我有时间也是会介绍的,刚好上篇我们用到了Picasso,

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

作者:张星 相信非常多下载过内核的人都对这个非常熟悉 git clone git://android.git.kernel.org/kernel/common.git kernel 可是这是在曾经,如今假设这么运行的话,会显演示样例如以下内容 Initialized empty Git repository in /home/star/working/kernel/.git/ android.git.kernel.org[0: 149.20.4.77]: errno=Connection ref