在Context api中,有几组函数,如getExternalCacheDir(),getDir(),getCacheDir()等,返回的都是一个File对象。这些函数在软件的缓存管理中,十分有用。现对照着api对这些函数的使用场景和区别作下总结。
Context.getDatabasePath(String name) : Context.openOrCreateDataBase会创建一个数据库。而getDatabasePath就是返回文件系统上此数据库的绝对路径。参数name为数据库的名字;
- Context.getDir(String name,int mode) API level 1
- Context.getCacheDir() API level 1
- Context.getExternalCacheDir() API level 8
- Context.getExternalFilesDir() API level 8
- Context.getFilesDir() API level 1
好吧,看这5个函数略晕。莫晕,api给了很详细的解释。
先看下getDir(String name,int mode)的用法吧。
获取一个文件的路径(如果不存在就创建),应用程序可以在这个路径里放置一些数据文件。通过这个函数返回的file对象,我们可以创建或者读取这个路径里的文件。但是只有我们自己的应用程序可以访问这些文件。嘿,看来我们可以在这个函数返回的文件路径里放点自己的“私房钱”。还有,我们可以通过参数mode来设置文件的读取权限。再加一句,返回的这个文件路径,可以是通过
Context.openFileOutput(String name,int mode)创建的文件。
再来看context另外两个函数,getCacheDir()和getExternalCacheDir().这俩哥们,虽说getExternalCacheDir比getCacheDir就多了个external,这待遇就差很多了。
既然是兄弟,就有很多共同点。首先,我们的应用都可以往这两个函数返回的路径里放入缓存文件,而且这些文件大小还有限制!比如说1mb,要是缓存文件超过1mb了,那不行,得把多余的数据删掉,这些删除操作不能依赖系统噢,得自己搞。当软件被删掉的时候,这些缓存文件也得被删掉。系统内存不足的时候,这些缓存文件也会最先被删除。
不同点,那getExternalCacheDir()就得有一把泪啊。首先,由于系统不经常监督sd卡的可用大小为多少,放在sd卡的这些缓存文件就可能没有删除。还有当sd拔出,或者手机连着电脑,sd装载的时候,就不能再读写这些文件了。所以使用之前,得问问sd的状态。所以别说自己待遇差,自己不靠谱先!还有就是写在sd卡的缓存文件,是没有安全措施保存的。。别的应用也可以看的。。