我正在使用DownloadManager启动一个2Gb文件下载,在此过程中,我向用户提供了选择他们想要保存该文件的位置的选项:内部存储或SD卡。另外,我给用户一个选择取消上述下载。这是我的代码:
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(downloadId);
Cursor cursor = downloadManager.query(query);
try {
if (cursor.moveToFirst()) {
int status =cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));
if (status == DownloadManager.STATUS_RUNNING ||
status == DownloadManager.STATUS_PENDING) {
downloadManager.remove(downloadId);
}
}
} finally {
cursor.close();
}
我的问题:当下载到内部存储时,.remove(downloadId)调用立即工作,并且下载停止。但是当下载到SD卡(在三星的S7边缘上),使用相同的代码,它需要3-5分钟才能停止下载。
有什么办法消除这种拖延吗?
编辑:由Activity.getExternalFilesDirs()返回的一些路径示例:
/存储/模拟/./-这是内部的 //存储/0123-4567/./-这是SD卡
发布于 2016-10-25 16:08:44
我自己找到了答案:看起来在下载开始之前,DownloadManager会创建一个2Gb文件(我正在下载的文件的大小),其中填充了零,这样它就可以保留分配的存储空间。这种文件写入操作使得SD卡的速度变慢了。
S7边缘上的内部存储速度非常快,这就是为什么不存在这个问题。实际的问题(我认为是OS错误)是调用.remove()来等待初始的写操作,而不是取消它。
https://stackoverflow.com/questions/40240550
复制相似问题