0

我使用DownloadManager開始2Gb文件下載,並且這樣做可以讓用戶選擇他們想要保存的位置文件:內部存儲或SD卡。 此外,我給用戶一個選項來取消所述下載。這裏是我的代碼:DownloadManager需要3-5分鐘才能停止下載,只有在使用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(); 
} 

我的問題:下載到內部存儲的時候,在卸下襬臂(downloadId)調用工作瞬間,並且下載停止。但使用相同的代碼下載到SD卡(在三星Galaxy S7 Edge上)時,需要3-5分鐘才能停止下載。

關於消除延遲的任何想法?

編輯:一些路徑的示例,通過Activity.getExternalFilesDirs()返回:

/storage/emulated/.../ - 這是內部

/存儲/ 0123-4567/.../- 這是SD卡

+0

您可以舉出您認爲是內部存儲器和SD卡上的路徑示例嗎? – greenapps

+0

剛剛編輯的問題添加路徑 – zrgiu

+0

/storage/emulated/0/......被稱爲外部存儲。用getExternalStorageDirectory()獲得。但我沒有看到解決方案。抱歉。你測試過其他設備了嗎? – greenapps

回答

0

找到了答案我自己:它看起來像開始下載前,下載管理器創建用零填充一個2GB的文件(我下載文件的大小)以便 它保持分配的存儲空間。該文件寫入操作是SD卡上的緩慢操作。

S7 Edge上的內部存儲器非常快速,這就是爲什麼問題不存在的原因。實際問題(我認爲是一個操作系統錯誤)是調用.remove()等待該初始寫操作而不是取消它。

相關問題