Android 重要的文件目录和文件分析
来源:互联网 发布:济宁网络问政平台育才 编辑:程序博客网 时间:2024/05/22 10:29
目录
平时的开发中,主要由两种方式来获取应用可用的目录:
- Environment 一般用来获取公共目录
- Context 一般用来获取当前应用目录
下面使用 lyn.demo 的包和小米手机 5 做测试。有 25 G 手机内存,用掉了 20 G 后各个目录的情况如下
1 Environment.getDownloadCacheDirectory();
/cache total:248M left:226M
2 Environment.getExternalStorageDirectory()
/storage/emulated/0 total:25G left:5G
这个目录就是 SDCard 的主目录
3 Environment.getExternalStoragePublicDirectory(XXX)
/storage/emulated/0/XXX total:25G left:5G
这个方法可以用来获取 SDCard 的的一些标准目录,比如 DCIM,Music 等
相应的可以使用 Environment 已经定义好的类型
- Environment.DIRECTORY_MUSIC
- Environment.DIRECTORY_PODCASTS
- Environment.DIRECTORY_RINGTONES
- Environment.DIRECTORY_ALARMS
- Environment.DIRECTORY_NOTIFICATIONS
- Environment.DIRECTORY_PICTURES
- Environment.DIRECTORY_MOVIES
- Environment.DIRECTORY_DOWNLOADS
- Environment.DIRECTORY_DCIM
4 context.getExternalFilesDir
/storage/emulated/0/Android/data/lyn.demo/files total:25G left:5G
这个目录可以用来放应用的一些下载的资源
5 context.getExternalCacheDir
/storage/emulated/0/Android/data/lyn.demo/cache total:25G left:5G
这个目录可以用来做为应用的缓存,比如用了 ImageLoader 的图片缓存。
比如网易新闻在 cache 下新建了个 bitmap 目录,放了应用的图片缓存
在设置里点击“清除缓存”,会删掉该目录
6 context.getFilesDir
/data/user/0/lyn.demo/files total:25G left:5G
其中,/data/user/0 是一个链接目录,指向的是 /data/data,所以真实的路径是 /data/data/lyn.demo/files,这个目录也可以作为文件的存储
这个目录下还有很多和应用相关的非常重要的文件目录。比如推酷应用有这些目录
一般比较重要的有
- lib 存放着 apk 携带的 so 库,是一个链接文件。如果应用没有 so 库的话,自然也不会有这个目录。
- shared_prefs 存放应用的 SharedPreference 的存储,实际上是一堆 xml 文件
- databases 存放着应用的 sqlite 数据库,以 db 为后缀
当在设置里点击清除数据后,只有 lib 没有影响,其他文件都会被删除
以上可以发现,/data 目录虽然在内部存储中,确同样可以使用到 SDCard 的25G内存,应该是 ROM 有做特殊的处理
当我把内存打爆后,也就是内部存储和外部存储的内存全部用完后,手机会重启,重启后 logcat 有这样的记录
08-25 16:56:32.495 7953-9504/? D/MediaProvider: object removed 85044
08-25 16:56:32.495 7953-9504/? D/MediaProvider: object removed 85045
08-25 16:56:32.517 7953-9504/? D/MediaProvider: object removed 85046
08-25 16:56:32.518 7953-9504/? D/MediaProvider: object removed 85047
08-25 16:56:32.518 7953-9504/? D/MediaProvider: object removed 85048
08-25 16:56:32.519 7953-9504/? D/MediaProvider: object removed 85049
08-25 16:56:32.520 7953-9504/? D/MediaProvider: object removed 85050
08-25 16:56:32.541 7953-9504/? D/MediaProvider: object removed 85051
然后查看又有了几十M内存可用,可见系统在有清理策略,在一直删除数据
不过比较悲催的是,后来因为彻彻底底打爆内存,小米自动关机后无法正常开机,一直停留在启动画面,不过还能连接电脑,通过 logcat 观察发现了系统发生 IOException,因为实在没有任何内存供它写入,所以索性就开不了机了。重新刷机后恢复正常。
文件
1 数据库 db
在 root 的机子上,安装 ES文件浏览器可以看到这些目录。同时,安装 SQLite Editor 可以查看 /data/data/xxx/databases 下的数据库
比如我们可能会使用 ContentResolver 去查询 MediaStore,其实就是在查系统的数据库,里面有存储卡里的一些多媒体信息,一些视频的信息的数据库地址在 /data/data/com.android.providers.media/external.db
2 SharedPreferenced存储
本质上就是一些 xml 文件,比如我自己的 lyn.demo 应用的 SharedPreference 存储在 /data/data/xxx/shared_prefs 中
- Android 重要的文件目录和文件分析
- NTFS的目录和文件
- NTFS的目录和文件
- 目录和文件的操作
- 列出指定文件的目录和文件,并进行缩进
- 流和文件(文件目录的一些操作)
- 统计文件所包含目录和文件的个数
- android 工程lib 里的目录和文件
- JAVA操作文件和文件目录
- Java文件对象创建目录和文件
- JAVA创建文件目录和文件
- java 创建文件和文件目录
- 文件和文件目录重命名问题
- MediaScanner扫描文件和文件目录
- Android Studio 主要目录和文件简介
- android中目录和文件讲解
- 显示指定目录下文件所有文件的行数和文件的个数
- 目录和文件的的rwx属性
- medsci
- ORACLE数据库的导入与导出,以及触发器的用法
- STL笔记之hashtable
- 【学习笔记】CSS的基本语法(一)
- CVTE笔试题
- Android 重要的文件目录和文件分析
- 【精】POJ 2151Check the difficulty of problems(概率dp+数学知识)
- codeforces454CLittle Pony and Expected Maximum+数学期望
- java包含继承的类中 给各项成员的加载顺序
- PHP endif、endwhile、endfor、冒号、switch、foreach使用介绍
- 结合Linux的应用场景看MIPS32架构之前言
- Hadoop yarn协议汇总
- img的间隙
- 搜索 POJ 3131 Cubic Eight-Puzzle