Android 缓存目录 Context.getExternalFilesDir()和Context.getExternalCacheDir()方法

一、基础知识

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。
大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据

通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项

 

如果要保存下载的内容,就不要放在以上目录下

 

二、图片实例

 

                   Android/data 目录                                        Android/data/应用包名

 

                       

 

 

 

2.、

缓存

String cachePath1 =  context.getExternalCacheDir().getPath();
String cachePath2 =  context.getCacheDir().getPath();
KLog.d( "cachePath1--" + cachePath1 ) ;
KLog.d( "cachePath2--" + cachePath2 )

结果:

cachePath1--/storage/emulated/0/Android/data/com.zyj.app/cache
cachePath2--/data/user/0/com.zyj.app/cache

 

3、模拟器缓存

context.getExternalCacheDir().getPath();    --->     /storage/emulated/0/Android/data/com.app/cache    1、这个目录可以在手机上看到,不用root , 这个目录的存在于外部SD卡上的。2、app卸载后,这个目录的数据全部被系统清除。

总结:

context.getExternalCacheDir()  、 context.getCacheDir()

相同点:

1、相同点:都可以做app缓存目录。

2、app卸载后,两个目录下的数据都会被清空。

 

不同点:

1、目录的路径不同。前者的目录存在外部SD卡上的。后者的目录存在app的内部存储上。

2、前者的路径在手机里可以直接看到。后者的路径需要root以后,用Root Explorer 文件管理器才能看到。

 

需要注意的事项:

1、由于context.getExternalCacheDir() 的目录存在外部SD卡上的,所以在使用这个方法的时候要判断外部SD卡的状态是否可用。

   /**
     * 获取app缓存路径
     * @param context
     * @return
     */
    public String getCachePath( Context context ){
        String cachePath ;
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                || !Environment.isExternalStorageRemovable()) {
            //外部存储可用
            cachePath = context.getExternalCacheDir().getPath() ;
        }else {
            //外部存储不可用
            cachePath = context.getCacheDir().getPath() ;
        }
        return cachePath ;
    }

  

 

  

 

时间: 2024-10-26 09:29:50

Android 缓存目录 Context.getExternalFilesDir()和Context.getExternalCacheDir()方法的相关文章

Android RoboGuice使用指南(15) Inject Context

在Android应用程序中,很多地方需要引用到Context对象(Activity, Application,Service等).Roboguice 使得引用Context对象变得非常容易. 可以参见下面例子,这里定义一个不在Activity中的类ContextInfo,需 要引用Context对象: class ContextInfo{ final Context context; @Inject ContextInfo(Context context){ this.context=conte

android-研究过Android /proc/目录的请进来~~

问题描述 研究过Android /proc/目录的请进来~~ 如果有研究过/proc/目录下面的文件的都知道,/proc/目录下包含着系统运行的各种信息,包括CPU,内存等等,还记录着从开机开始每个进程的信息.并且这些信息更新得很快,很频繁. 我的问题是,有人知道android系统是在什么时候写入这些信息吗?在哪里写入的?多久写入一次? 有知道的请回复下,我们一起讨论交流~ 解决方案 这个是内核虚拟出来的,内核会把这些硬件信息虚拟成一个个文件,给用户态程序访问,获取这些数据 解决方案二: 这个是

MPMoviePlayerController播放网络视频的缓存目录

问题描述 MPMoviePlayerController播放网络视频的缓存目录 由于项目需要,播放网络视频我调用了MPMoviePlayerController,后面我想做缓存处理时,发现它在播放网络视频时下面显示了下载进度条,貌似已经下载下来了,我现在就是需要找到下载的目录.劳烦大神告知一下. 解决方案 关于MPMoviePlayerController以及MPMoviePlayerViewControlle流媒体视频播放

inputconsumer-/framework/base/core/java/android/view/目录下找不到InputConsumer.java

问题描述 /framework/base/core/java/android/view/目录下找不到InputConsumer.java 版本是Android4.3,在根目录下用命令find -name InputConsumer.java也找不到,请问这是怎么回事?

Android缓存html5页面视频

问题描述 Android缓存html5页面视频 android weibview 如何缓存html5页面中的视频,并使用呢 解决方案 http://www.cnblogs.com/snake-hand/archive/2013/06/12/3133043.html 解决方案二: 把视频文件写入手机内存或sd卡,用的时候在加载调用

Android Studio目录结构

原文链接:https://segmentfault.com/a/1190000002963895 这是AndroidStudio的目录结构: [= = 好复杂的样子] OK,我们这么看,第一,把这么多文件先分成这么三块 1. 编译系统(Gradle) 2. 配置文件 3. 应用模块 Gradle是Google推荐使用的一套基于Groovy的编译系统脚本(当然,你也可以使用ant),具体的介绍和文档可以参考这个传送门:https://developer.android.com/tools/buil

context.Response.WriteFile(context.Request.PhysicalPath) 数据无法覆盖的问题

问题描述 用context.Response.WriteFile(context.Request.PhysicalPath)写入数据,然后用WebClient.DownloadFile(url,stringname)将其下载.接着再写入另外一个文件,此时再下载,虽然文件名可以按照命令变为第二次定义的文件名,可是内容却还是第一次写入的内容,context.Response.WriteFile(context.Request.PhysicalPath)无法覆盖么 解决方案 解决方案二:你在写完第一个

context.Response.WriteFile(context.Request.PhysicalPath)

问题描述 aspnet在一般处理程序中,可以使用context.Response.WriteFile输出页面,如果页面上含有用户控件!则通过context.Response.WriteFile(context.Request.PhysicalPath)无法将页面完成输出,即页面用户控件无法输出!求解决方法! 解决方案 解决方案二:莫非没有人遇到过这样的问题?解决方案三:System.IO.File.ReadAllText(path);解决方案四:引用2楼的回复: System.IO.File.R

Linux Context , Interrupts 和 Context Switching 说明【转】

转自:http://blog.csdn.net/tianlesoftware/article/details/6461207 一. 进程Context 定义        当一个进程在执行时, CPU的所有寄存器中的值.进程的状态以及堆栈中的内容,比如各个变量和数据,包括所有的寄存器变量.进程打开的文件.内存信息等.这些信息被称为该进程的上下文(Context).          一个进程的Context可以分为三个部分:用户级上下文.寄存器上下文以及系统级上下文:        (1)用户级