问题
如果缓存
目录已满,则尝试执行简单请求时将失败,而不会发送DownloadManager.ACTION_DOWNLOAD_COMPLETE
广播。
注意:该问题是一般性的,但在具有限制缓存(/data/data/com.android.providers.downloads/cache)大小的低端设备上可以被大多数复现。
代码
接收器已正确配置,因为当操作成功或因其他原因失败时仍会收到广播。
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://www.apkmirror.com/wp-content/themes/APKMirror/download.php?id=44753"));
request.setTitle("Facebook");
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
期望的解决方案
我对解决具体问题或者更多相关信息感兴趣。
我不希望使用需要停止使用DownloadManager
或添加WRITE_EXTERNAL_STORAGE
权限的解决方案。
日志
当缓存正在充满且最后无法再容纳时,您可以观察到以下日志记录(使用downloadmanager
过滤)。
11-08 08:47:06.079 830-14261/? I/DownloadManager: Download 135 starting
11-08 08:47:06.989 830-14261/? W/DownloadManager: Downloads data dir: /data/data/com.android.providers.downloads/cache is running low on space. space available (in bytes): -6994124
11-08 08:47:06.999 830-14261/? I/DownloadManager: discardPurgeableFiles: destination = 2, targetBytes = 10485760
11-08 08:47:06.999 830-14261/? I/DownloadManager: Purged files, freed 0 for 10485760 requested
11-08 08:47:07.309 830-14261/? W/DownloadManager: Aborting request for download 135: not enough free space in the filesystem rooted at: /data/data/com.android.providers.downloads/cache and unable to free any more
11-08 08:47:07.319 830-14261/? I/DownloadManager: Download 135 finished with status INSUFFICIENT_SPACE_ERROR
这里有一个演示项目,可以展示问题。请记住,缓存目录必须在那个时候已经被填满(由于无法清除的项目,根据我的经验,基本上意味着中止下载)。