DownloadManager停止下载需要3-5分钟,仅当使用SD卡时



我开始使用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(downloaddid)调用立即工作,下载停止。但当下载到SD卡(在三星Galaxy S7 Edge上)时,使用相同的代码,需要3-5分钟才能停止下载。

对于消除这种延迟有什么想法吗?

编辑:一些路径示例,由Activity.getExternalFilesDirs()返回:

/存储/模拟/…/- this is internal

/存储/0123 - 4567/…/-这是SD卡

为我自己找到了答案:看起来在下载开始之前,DownloadManager创建了一个2Gb的文件(我正在下载的文件的大小),填充了零,以便它保持分配的存储。文件写入操作是导致SD卡运行缓慢的原因。

S7 Edge的内部存储非常快,这就是为什么S7 Edge没有出现问题的原因。实际的问题(我认为是操作系统的bug)是调用.remove()等待初始写操作,而不是取消它。

相关内容

  • 没有找到相关文章

最新更新