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之下载管理者的更多相关文章
- android sdk下载
android sdk下载 所有的离线包都有 http://mirrors.neusoft.edu.cn/android/repository/
- Android Studio下载及使用教程(转载)
(一)下载及相关问题解决: Android Studio 下载地址,目前最新可下载地址,尽量使用下载工具. Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却 ...
- 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)
1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- android程序---->android多线程下载(一)
多线程下载是加快下载速度的一种方式,通过开启多个线程去执行一个任务,可以使任务的执行速度变快.多线程的任务下载时常都会使用得到断点续传下载,就是我们在一次下载未结束时退出下载,第二次下载时会接着第一次 ...
- Android Studio下载与安装
Android Studio下载与安装 1 2 3 4 5 分步阅读 百度经验:jingyan.baidu.com 自从Google宣布Android Studio将取代Eclipse,正式成为官方集 ...
- 曲线救国,解决Mac系统下,Android sdk下载失败的问题
Mac下翻_墙的问题 话说GFW屏蔽谷歌已经有一阵子了,最近打算在Mac系统下折腾个Android应用,备好了IDE,只欠SDK,无奈下载时因为GFW的缘故,总是失败,我心痛哉! 由于本人偏爱Mac系 ...
- Android异步下载图片并且缓存图片到本地
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...
- Android源代码下载方法具体解释
作者:张星 相信非常多下载过内核的人都对这个非常熟悉 git clone git://android.git.kernel.org/kernel/common.git kernel 可是这是在曾经,如 ...
- Android Studio下载及离线升级方法
由于众所周知的原因,android官网无法访问,所以我们要用到翻.墙.工具,我用的是自.由.门,大家自行搜索下载. android studio下载地址: https://dl.google.com/ ...
随机推荐
- 转载 Android快捷键 转载
一.实用类快捷键 1 常用熟悉的快捷键 CTRL+C(复制).CTRL+X(剪切).CTRL+Z(撤销).CTRL+F(查找).CTRL+H(搜索文件或字符串).CTRL+Y(重做).CTRL+/(双 ...
- 最完美解决方案:js弹出窗口关闭当前页面,而不弹出提示框
该功能主要用于业务系统中的登录操作,登录后弹出全屏的业务系统主界面,而不需要工具栏.地址栏.菜单等功能. 之前针对不同浏览器找了无数种方法,包括网上能查到的所有方法,弹出的结果都不理想.结果有的IE6 ...
- C#中如何在字符串中设置上标
一.HTML中:如字符串"21st" 想要把st 设置为上标,在html标签中是21<sup>st</sup> 二.C#编辑器中你可以使用 unicode ...
- CentOS评估磁盘I/O性能读写极限测试
用一个fio工具 安装 yum -y install fio 二,FIO用法: 随机读:fio -direct=1 -iodepth 1 -thread -rw=randread -ioengine ...
- 树莓派安装LAMP作为服务器
先运行 sudo apt-get update 更新软件源 1.安装Apache sudo apt-get install apache2 2.安装Mysql sudo apt-get install ...
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...
- CSS3初学篇章_3(属性选择符/字体样式/元素样式)
属性选择符 选择符 说明 E[att] 选择具有att属性的E元素. E[att="val"] 选择具有att属性且属性值等于val的E元素. E[att~=&quo ...
- BZOJ1857[SCOI2010]传送带
题目大意:平面上两条线段,一个人从一条线段的一个点到另一条线段的一个点,最小时间是多少 路径肯定是在一条线段上走一段,然后走平面,最后再走另一条线段,那么需要确定的就是在两条线段上走的距离,其他暴力算 ...
- IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)
******HMTg.h 模型数据 #import <Foundation/Foundation.h> @interface HMTg : NSObject @property (nona ...
- 【iCore3 双核心板】例程二十一:LAN_TCPS实验——以太网数据传输
实验指导书及代码包下载: http://pan.baidu.com/s/1ntTjWpV iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...