Aspsine / MultiThreadDownload

Android Multi-Thread Download library
908 stars 284 forks source link

下载完成的任务,重新进入APP,提示未下载 #53

Closed xiaojidonggong closed 8 years ago

xiaojidonggong commented 8 years ago

下载后的文件已经保存到SDCard里面了,有什么办法进入下载页面的时候,就知道该任务已经完成了?我发现任务已经有了下载,我下次进的时候,状态也正确,提示已经下载的进度也正确

LiuJQ commented 8 years ago

看了下demo效果,的确是这样,准备看看如何实现

xiaojidonggong commented 8 years ago

@LiuJQ 目前工程里,我根据下载字节数和当前字节数判断的,如果相当则说明下载完了。这种方式肯定是不好的,因为如果多个线程下载,那么一个任务会在数据库里有多份,这样的话,要知道每一个下载是否完成。 为了简单,我只有弄成单线程断点下载。 目前暂时这种方案去解决的,我觉得更好的方案是表里增加一个字段来标识当前下载的状态,另外不建议使用广播来通知,不如改成EventBus或者回调方式去告知前台,另外里面还有一些bug,总体来说能够满足需求,用户量级大的话,不知道是否有其他Bug

xiongjianchang commented 8 years ago

@tikkat3 我用了愚蠢的方法,直接判断文件是否已经存在。下载完成时会删除下载信息,所以一开始判断是否有下载信息,没有的话要么就是下载完了,要么就是还没下载,简单暴力。代码刚写完,还没系统测试,不知道这样做会不会引发其他问题。

DownloadInfo downloadInfo = DownloadManager.getInstance().getDownloadProgress(info.getUrl());
if (downloadInfo != null) {
    info.setProgress(downloadInfo.getProgress());
    info.setDownloadPerSize(getDownloadPerSize(downloadInfo.getFinished(), downloadInfo.getLength()));
    info.setStatus(AppInfo.STATUS_PAUSED);
} else {
    if (new File(info.getFilePath()).exists()) {
        info.setStatus(AppInfo.STATUS_COMPLETE);
    } else {
        info.setStatus(AppInfo.STATUS_NOT_DOWNLOAD);
    }
} 
Aspsine commented 8 years ago

下载完成后,会回调onCompleted(),请自行记录。