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/ ...
随机推荐
- dataTransfer.getData()在dragover,dragenter,dragleave中无法获取数据的问题
做拖拽相关效果时,想在ondragover时给被拖拽元素添加一些样式,于是在dragover事件的函数中通过dataTransfer.getData()获取在dragstart中设置的数据,然而发现d ...
- nginx资源定向 css js路径问题
今天玩玩项目,学学nginx发现还不错,速度还可以,但是CSS JS确无法使用,原来Iginx配置时需要对不同类型的文件配置规则,真是很郁闷,不过想想也还是很有道理.闲暇之际,把配置贴上来.#user ...
- win7/IE8无法加载QCbin的插件
pian A: 1.控制面板->系统和安全->更改用户账户控制设置->安全等级调至最低->关机重启 2.打开IE浏览器->工具->Internet选项->高级 ...
- zend studion实现自动换行
真是学一门语言不仅有学语言的阻碍,同时还有编写代码工具的障碍,zend studion的自动换行问题 zend studion默认的是不会自己换行,百度查找后找到了如下个方法: 实现: 菜单" ...
- hdu-acm steps 免费馅饼
/*dp入门级的题目,和数塔是一样的,这道题不用做什么优化,感觉时间复杂度不会超.主要还是细节上的问题, 这道题的状态和状态方程都容易找到,采用自底向上的方式会好很多*/ #include" ...
- CMD和DOS的区别
很多人喜欢在这里把XP下的CMD和我们的DOS混淆,因此今天我特别发帖说明:CMD和DOS是完全不同的!请各位始终牢记这一点,否则在高手面前就丢人了!因为CMD是32位应用程序(而DOS是16位操作系 ...
- ckeditor简单的演示
先把ckeditor文件添加到项目中 然后在页面上引用 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml& ...
- iOS 如何通过CocoaPods添加第三方框架
一 先安装Ruby环境: http://ruby-china.org/wiki/install_ruby_guide 在安装的时候,若是出现: 1.You don't have write perm ...
- 文件代码对比软件 Beyond Compare
Beyond Compare https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=Beyond%20Co ...
- SVN 远程无法联通
远程花生壳搭建之后,配置在服务器iis上的其他的网站都能访问,局域网都可以,就是SVN远程连接不通. 没有搞过这样的问题,一下就不知道怎么办了.网上也没有人搞过,然后想到以前公司的一个大神搞过,然后请 ...