没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
多线程下载并不是并发下载线程越多越好,因为当用户开启太多的并发线程之后,应用程序需要维护每条线程的开销,线程同步的开销。 这些开销反而会导致下载速度降低。因此需要避免在代码中直接开启大量线程执行下载。 主要实现步奏: 1、定义一个DownUtil类,下载工作基本在此类完成,在构造器中初始化UI线程的Handler。用于子线程和UI线程传递下载进度值。 2、所有的下载任务都保存在LinkedList。在init()方法中开启一个后台线程,不断地从LinkedList中取任务交给线程池中的空闲线程执行。 3、每当addTask方法添加一个任务,就向 mPoolThreadHandler发送条消息,
资源推荐
资源详情
资源评论
Android线程池控制并发数多线程下载线程池控制并发数多线程下载
多线程下载并不是并发下载线程越多越好,因为当用户开启太多的并发线程之后,应用程序需要维护每条线程的开销,线程同
步的开销。
这些开销反而会导致下载速度降低。因此需要避免在代码中直接开启大量线程执行下载。
主要实现步奏:
1、定义一个DownUtil类,下载工作基本在此类完成,在构造器中初始化UI线程的Handler。用于子线程和UI线程传递下载进
度值。
2、所有的下载任务都保存在LinkedList。在init()方法中开启一个后台线程,不断地从LinkedList中取任务交给线程池中的空
闲线程执行。
3、每当addTask方法添加一个任务,就向 mPoolThreadHandler发送条消息,就从任务队列中取出一个任务交给线程池执
行。这里使用了使用了Semaphore信号量,也就是说只有当一个任务执行完成之后,release()一个信号量,才能从
LinkedList中取出一个任务再去执行,否则acquire()方法会一直阻塞线程,直到上一个任务完成。
public class DownUtil
{
//定义下载资源的路径
private String path;
//指定下载文件的保存位置
private String targetFile;
//定义下载文件的总大小
private int fileSize;
//线程池
private ExecutorService mThreadPool;
//线程数量
private static final int DEFAULT_THREAD_COUNT = 5;
//任务队列
private LinkedList<Runnable> mTasks;
//后台轮询线程
private Thread mPoolThread;
//后台线程的handler
private Handler mPoolThreadHandler;
//UI线程的Handler
private Handler mUIThreadHandler;
//信号量
private Semaphore semaphore;
private Semaphore mHandlerSemaphore = new Semaphore(0);
//下载线程数量
private int threadNum;
public DownUtil(String path , String targetFile , int threadNum , final ProgressBar bar)
{
this.path = path;
this.targetFile = targetFile;
this.threadNum = threadNum;
init();
mUIThreadHandler = new Handler()
{
int sumSize = 0;
@Override
public void handleMessage(Message msg)
{
if (msg.what == 0x123)
{
int size = msg.getData().getInt("upper");
sumSize += size;
Log.d("sumSize" , sumSize + "");
bar.setProgress((int) (sumSize * 1.0 / fileSize * 100));
}
}
};
资源评论
weixin_38689976
- 粉丝: 6
- 资源: 924
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功