一、简介:
断点续传,这一概念经常听说,在项目中一直没有接触到,刚刚有点时间,自己做了一个列表下载的demo,先看图,如下:
如上图功能所示,可以同时下载多个文件(我为了展示方便,限制了同时只允许两路线程下载),并可以随时暂停,下次进入程序时也可以按上次暂停位置继续下载;话不多说,我现在将展示我的实现过程;
二、实现过程:
(1)首先创建下载对象:
public class DownloadFileInfo {private int id ;
private String fileName ; // 文件名
private String filePath ; // 文件下载路径
private long totalSize ; // 文件总大小
private long currSize ; // 当前已下载大小
private boolean isFinish ; // 是否已经下载完成
private boolean isDownload ; // 是否正在下载
//get/set方法、toSting方法
//根据需要还可重写equals方法,为了比较方便,我这里重写了此方法
@Override
public boolean equals(Object obj) {
if (obj instanceof DownloadFileInfo) {
if (((DownloadFileInfo) obj).getFilePath().trim().equals( filePath .trim())) {
return true ;
}
}
return false ;
}}
(2)建立sqlite数据库,并完善其操作方法,作用是保存每个下载文件的信息,如文件总大小,当前下载位置等,此为断点续传的基础,
db.execSQL("create table if not exists t_flie_down(_id integer primary key autoincrement" + ",down_path varchar(500) not null" + ",total_size long not null" + ",curr_size long not null" + ",file_name varchar(255) not null" + ",is_finish integer)");
public class DBOperation { private static DBOperation operation; private DBOpenHelper helper;
private static final String DB_TABLE = "t_flie_down";//表名 private static final String ID = "_id";//id private static final String DOWN_PATH = "down_path";//下载路径 private static final String TOTAL_SIZE = "total_size";//文件总大小 private static final String CURR_SIZE = "curr_size";//当前下载数 private static final String FILE_NAME = "file_name";//文件名 private static final String IS_FINISH = "is_finish";//0完成1未完成
private Lock lock = new ReentrantLock();
//获取静态实例 public static DBOperation getInstance(Context context) { if (operation == null) { synchronized (DBOperation.class) {