我的http库正在缓存http响应。我当前选择缓存数据的目录的实现如下所示:
public static File getDiskCacheDir(Context c) {
File dir = c.getExternalCacheDir();
if (dir == null)
dir = c.getCacheDir();
return dir;
}
我的想法是使用getExternalCacheDir()
作为第一选项,因为我假设有更多可用空间,然后getCacheDir()
。官方文档还指出getCacheDir()
中的可用空间不应该太大(1 MB?)
你应该总是有一个合理的最大值,例如1 MB 使用缓存文件占用的空间量,并修剪这些文件 超过那个空间时。
我的最大空间大约为40 MB。
所以我有两个问题:
我应该使用getExternalCacheDir()
吗?我的应用程序minSDK = 14.或者应该
我使用getCacheDir()
?
如果我应该使用getExternalCacheDir()
需要哪些权限?根据官方文件:
从KITKAT开始,无需读取或写入任何权限 返回的路径;它总是可以访问调用应用程序。这个 仅适用于为调用的包名生成的路径 应用。要访问属于其他包的路径, 需要WRITE_EXTERNAL_STORAGE和/或READ_EXTERNAL_STORAGE。
因此,根据我的理解,WRITE_EXTERNAL_STORAGE(包括阅读权限,至少需要先阅读API 19)才能在KitKat(API 19)之前与getExternalCacheDir()
一起正常使用。
所以我必须设置的权限是:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="19"/>
正确? 但是我在Lollipop上看到了一些相关的错误: Why do I need the WRITE_EXTERNAL_STORAGE permission with getExternalCacheDir() on Android Lollipop?
我应该在try-catch
周围添加getExternalCacheDir()
块并使用getCacheDir()
作为后备吗?