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/ ...
随机推荐
- 简短总结一下C#里跨线程更新UI(转)
摘自: http://my.oschina.net/sdqxcxh/blog/53707 跨线程更新UI是写多线程程序尤其是通信类的程序经常遇到的问题,这里面主要的问题是冲突,比如数据线程想要更新UI ...
- Linux任务调度命令(轻松管理Linux)
Linux任务调度其实就是让系统在某个时间执行某些命令或者程序,这样可以让管理员更加轻松地管理自己的Linux,当我刚了解到这个方法时,我的内心充满了无尽的欣喜,感觉Linux实在是太强大了. 下面我 ...
- Soldier and Bananas
Soldier and Bananas 题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=173141 题意: 给 ...
- 关于JS的算法
一.快速排序 function qSort(arr) { if(arr.length === 0) { return []; } var left = []; var right = []; var ...
- bzoj3594: [Scoi2014]方伯伯的玉米田--树状数组优化DP
题目大意:对于一个序列,可以k次选任意一个区间权值+1,求最长不下降子序列最长能为多少 其实我根本没想到可以用DP做 f[i][j]表示前i棵,操作j次,最长子序列长度 p[x][y]表示操作x次后, ...
- 2016HUAS暑假集训训练2 A - Is It A Tree?
Description A tree is a well-known data structure that is either empty (null, void, nothing) or is a ...
- Android课程---首学开发
新建一个Activity2类: package com.hanqi.test; import android.app.Activity; import android.os.Bundle; impor ...
- IOS彩票第二天设置界面(1)
****跳转到设置界面 - (IBAction)setting:(id)sender { // 创建设置口控制器 ILSettingTableViewController *settingVc = [ ...
- C# 代码笔记
一.使循环不卡 Application.DoEvents(); System.Threading.Thread.Sleep(5); 二.计算代码运行时间 Stopwatch sw = new Stop ...
- Minimum no. of iterations to pass information to all nodes in the tree
Given a very large n-ary tree. Where the root node has some information which it wants to pass to al ...