getExternalCacheDir()和getCacheDir()

时间:2015-09-21 10:25:14

标签: android permissions android-permissions

我的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。

所以我有两个问题:

  1. 我应该使用getExternalCacheDir()吗?我的应用程序minSDK = 14.或者应该 我使用getCacheDir()

  2. 如果我应该使用getExternalCacheDir()需要哪些权限?根据官方文件:

  3.   

    从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()作为后备吗?

0 个答案:

没有答案