【android】getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用

getCacheDir()方法用于获取/data/data/<application package>/cache目录

getFilesDir()方法用于获取/data/data/<application package>/files目录

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。

大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。

这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。

如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

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

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

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

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

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

-----------------------------------------------------------------------------------------------------------------------------------------------------

较优秀的程序都会专门写一个方法来获取缓存地址,如下所示:

[java] view
plain
copy

  1. public String getDiskCacheDir(Context context) {
  2. String cachePath = null;
  3. if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
  4. || !Environment.isExternalStorageRemovable()) {
  5. cachePath = context.getExternalCacheDir().getPath();
  6. } else {
  7. cachePath = context.getCacheDir().getPath();
  8. }
  9. return cachePath;
  10. }

可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是 /sdcard/Android/data/<application package>/cache 这个路径,而后者获取到的是
/data/data/<application package>/cache 这个路径。

参考:http://blog.csdn.net/beihai1212/article/details/7055899

http://blog.csdn.net/zhiyi2010/article/details/13017171

http://blog.csdn.net/guolin_blog/article/details/28863651

时间: 2024-12-29 12:08:56

【android】getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用的相关文章

横竖屏切换时,禁止activity重新创建,android:configChanges=&quot;keyboardHidden|orientation&quot; 不起作用

这个网上搜索,很多结果都是: AndroidManifest.xml android:configChanges="keyboardHidden|orientation" 但是,实际上很多手机上,这个根本不起作用.这是为什么呢? 因为,但多数人陈陈相因,文章直接转,都没有结果自己实践. 在低版本上,这个是可以起作用.在android 4.0 以上实际上这个是不起作用的. 必须要加上screenSize. android:configChanges="keyboardHidde

getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用

getCacheDir()方法用于获取/data/data/<application package>/cache目录 getFilesDir()方法用于获取/data/data/<application package>/files目录 ---------------------------------------------------------------------------------------------------------------------------

Android笔记:存储相关,getExternalCacheDir, getExternalFilesDir,getExternalStorageDirectory等

File cacheDir = mContext.getExternalCacheDir(); if(null != cacheDir){    mCacheDirPath = cacheDir.getAbsolutePath() + "/images/"; } if(TextUtils.isEmpty(mCacheDirPath)){    if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState(

Android开发中Context类的作用以及Context的详细用法

Android中Context的作用以及Context的详细用法 本文我们一起来探讨一下关于Android中Context的作用以及Context的详细用法,这对我们学习Android的资源访问有很大的帮助,文章中也贴出了一些关于Android Context使用的示例代码,非常不错,以下是原文: Context基本概念 Context是什么? 1) Context是一个抽象类,其通用实现在ContextImpl类中. 2) Context:是一个访问application环境全局信息的接口,通

Android布局中 android:layout_gravity=&quot;bottom&quot;为何不起作用?

在android布局时我们有时会需要将位于LinearLayout布局中的控件放在布局底部,或者是同时想将几个控件底部对齐,此时我们自然会想到使用 android:layout_gravity="bottom" 将控件放在该线性布局底部,但是,但是这样是行不通的,这个问题今天也困扰了我很长时间,以为是自己其他地方布局搞错了或者其他地方搞错了才会出现这种情况,最后没办法查资料才发现以下规律: 在 LinearLayout布局时: 当总布局为水平布局时 即当 android:orienta

Android Layout布局文件里的android:layout_height等属性不起作用

有的时候,我们配置好的布局文件,在加载完成添加到我们的Activity中后发现,并没有安装我们设置的属性 来布局,比为我们设置了android:layout_marginTop="100dip",但是运行程序后发现一点作用都没有,相似的还有layout_height等以android:layout_开头的属性设置都没有作用,这类问题以我们使用Adapter的作为数据源的时候作用居多,因为Adapter里有一个方法是getView,这个返回的VIew是一个从XML布局里加载的,一般如下:

[Android Pro] 横竖屏切换时,禁止activity重新创建,android:configChanges=&quot;keyboardHidden|orientation&quot; 不起作用

referece to : http://blog.csdn.net/mybook1122/article/details/24978025 这个网上搜索,很多结果都是: AndroidManifest.xml android:configChanges="keyboardHidden|orientation" 但是,实际上很多手机上,这个根本不起作用.这是为什么呢? 因为,但多数人陈陈相因,文章直接转,都没有结果自己实践. 在低版本上,这个是可以起作用.在android 4.0 以上

ANDROID 中UID与PID的作用与区别

PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在android系统中一般不会把已经kill掉的进程ID重新分配给新的进程,新产生进程的进程号,一般比产生之前所有的进程号都要大. UID:一般理解为User Identifier,UID在linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的管理.而在android 中又有所不同,因

Android 中pid与uid的作用与区别

PID:为Process Identifier, PID就是各进程的身份标识. 程序一运行系统就会自动分配给进程一个独一无二的PID.进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在android系统中一般不会把已经kill掉的进程ID重新分配给新的进程,新产生进程的进程号,一般比产生之前所有的进程号都要大. UID:一般理解为User Identifier,UID在linux中就是用户的ID. 表明时哪个用户运行了这个程序,主要用于权限的管理.而在android 中又有所不同