赞
踩
这篇文章把F-droid的下载功能经过修改单独拿出来,而且做了一个demo。
希望能对自己后续起到借鉴作用。各位童鞋也可以去进行下载。
其实主要的思想有2个
1、使用接口进行回调
2、线程直接调用回调,由于无法知道主线程是否进行UI操作,所以把线程的回调进行了包装,使用Handler来发消息。保证不会崩溃。
项目下载地址:
http://download.csdn.net/download/leehu1987/7979253
尚未完成的功能:
1、断点下载(需要数据库)
2、如果下载完成了,下次下载应该是不需要下载了。
缺陷:
一个下载线程只能注册一个监听,比较好的办法是可以使用观察者模式通知各个页面。后续进行优化下。
一、定义一个接口,用于页面下载状态的监听;
- <pre class="java" name="code">import java.io.Serializable;
-
- public interface DownloadListener {
-
- public static class Data implements Serializable {
- private static final long serialVersionUID = 8954447444334039739L;
- private long currentSize;
- private long totalSize;
-
- public Data() {
- }
-
- public Data(int currentSize, int totalSize) {
- this.currentSize = currentSize;
- this.totalSize = totalSize;
- }
-
- public long getCurrentSize() {
- return currentSize;
- }
-
- public void setCurrentSize(long currentSize) {
- this.currentSize = currentSize;
- }
-
- public long getTotalSize() {
- return totalSize;
- }
-
- public void setTotalSize(long totalSize) {
- this.totalSize = totalSize;
- }
-
- @Override
- public String toString() {
- return "Data [currentSize=" + currentSize + ", totalSize="
- + totalSize + "]";
- }
-
- }
-
- /**
- *
- * @param data
- * : transfer downloaded data
- */
- public void onProgress(Data data);
-
- /**
- *
- * @param e
- * : exception
- */
- public void onError(Exception e);
-
- public void onCompleted();
- }
二、定义了一个Downloader父类,为了适应不同的下载,比如使用Http进行下载;使用代理进行下载等。
所以这个类是一个接口类,定义了一些基本的操作方法。
package com.example.downloader;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。