第二阶段 1、完善整体流程
来源:互联网 发布:linux无法定位软件包 编辑:程序博客网 时间:2024/06/08 19:09
在上一阶段中,基本流程已经跑通,基本实现用户发起下载操作,DownloadManager调用add方法开启DownloadService服务,DownloadService根据动作类型执行下载任务,被观察者分别在下载前、下载中、下载后通知观察者改变状态
大致流程:
用户–>DownloadManger(开启服务)–>DownloadService(开启任务线程)–>DownloadTask(具体执行)
接下来完善DownloadManager、DownLoadService、DownloadTask
1、DownloadManager
添加暂停,继续下载,取消方法
public void pause(DownloadEntry entry) { Intent intent = new Intent(context, DownloadService.class); intent.putExtra(Constant.KEY_DOWNLOAD_ENTRY, entry); intent.putExtra(Constant.KEY_DOWNLOAD_ACTION, Constant.KEY_DOWNLOAD_ACTION_PAUSE); context.startService(intent); } public void resume(DownloadEntry entry) { Intent intent = new Intent(context, DownloadService.class); intent.putExtra(Constant.KEY_DOWNLOAD_ENTRY, entry); intent.putExtra(Constant.KEY_DOWNLOAD_ACTION, Constant.KEY_DOWNLOAD_ACTION_RESUME); context.startService(intent); } public void cancel(DownloadEntry entry) { Intent intent = new Intent(context, DownloadService.class); intent.putExtra(Constant.KEY_DOWNLOAD_ENTRY, entry); intent.putExtra(Constant.KEY_DOWNLOAD_ACTION, Constant.KEY_DOWNLOAD_ACTION_CANCEL); context.startService(intent); }
2、DownloadService
添加开始下载,暂停下载,继续下载,取消下载方法,并将下载过程移植到DownloadTask中,每一个线程任务要保存到HashMap中,别忘了注册服务啊~
private void doAction(DownloadEntry entry, int action) { private HashMap<String, DownloadTask> mDownloadingTasks = new HashMap<String, DownloadTask>(); // check action do related action switch (action) { case Constant.KEY_DOWNLOAD_ACTION_ADD: startDownload(entry); break; case Constant.KEY_DOWNLOAD_ACTION_PAUSE: pauseDownload(entry); break; case Constant.KEY_DOWNLOAD_ACTION_RESUME: resumeDownload(entry); break; case Constant.KEY_DOWNLOAD_ACTION_CANCEL: cancelDownload(entry); break; default: break; } } private void startDownload(DownloadEntry entry) { DownloadTask task = new DownloadTask(entry); task.start(); mDownloadingTasks.put(entry.id, task); } private void pauseDownload(DownloadEntry entry) { DownloadTask task = mDownloadingTasks.remove(entry.id); if (task != null) task.pause(); } private void resumeDownload(DownloadEntry entry) { } private void cancelDownload(DownloadEntry entry) { DownloadTask task = mDownloadingTasks.remove(entry.id); if (task != null) task.cancel(); }
3、DownloadTask
描述单个任务的操作细节
public void pause() { isPaused = true; } public void cancel() { isCancelled = true; } public void start() { entry.status = DownloadEntry.DownloadStatus.downloading; DataChanger.getInstance().postStatus(entry); // 模拟下载过程 entry.totalLength = 1024 * 100; for (int i = 0; i < entry.totalLength; i++) { // 当前下载任务是否是暂停或者取消状态 if (isPaused || isCancelled) { entry.status = isPaused ? DownloadEntry.DownloadStatus.pause : DownloadEntry.DownloadStatus.cancel; DataChanger.getInstance().postStatus(entry); // TODO if cancelled ,delete related file; return; } i += 1024; entry.currentLength += 1024; DataChanger.getInstance().postStatus(entry); } entry.status = DownloadEntry.DownloadStatus.completed; DataChanger.getInstance().postStatus(entry); }
相关知识来源:
stay老兄的有心课堂-自己动手写多任务下载框架
0 0
- 第二阶段 1、完善整体流程
- uboot第二阶段启动流程
- kernel启动流程第二阶段
- 整体流程
- uboot - 启动流程分析【第二阶段】
- 俯瞰Struts2的整体流程(1)
- socket API接口(1)- 整体流程
- 项目整体流程
- Struts2的整体流程
- LDA整体流程
- LDA整体流程
- 整体项目开发流程
- 中断-整体流程
- 中断-整体流程
- 中断-整体流程
- Spark 的整体流程
- 项目开发整体流程
- 中断-整体流程
- 监听UITextField的内容变化,获取键盘的模式
- 设计模式之抽象工厂
- vs2015打开EXCEL文档范例及其注意事项!!!
- handler的机制和例子解析
- intellij projectStructure
- 第二阶段 1、完善整体流程
- 值得推荐的C/C++框架和库
- Photoshop CS6自学(五)图片编辑
- Gradle使用简记
- JVM学习笔记(二)---类加载器
- HrbustOJ B - 病毒【并查集】
- scrapy实战二
- 真实工作环境下使用Git提交代码的流程
- 第二阶段 2、添加多线程任务,完善下载,暂停,继续,取消四个功能