Android存储

Android 数据存储。一般有五种:
1、共享首选项。(SharedPreference)
2、内部存储(手机自带存储):①私有缓存文件,②私有存储。
3、外部存储(外/内置存储卡):①外部缓存文件,②外部存储,③外部私有存储,④公共文件目录。
4、SQLite数据库。
5、网络。

下面对以上这些方式做一些解释:
1、SharePreference:最常用的保存的一些小的业务数据,用户状态,或是APP的使用状态记录等。在用户卸载APP的时候数据也会被一起被清空。

SharedPreference sPreference = context.getSharedPreference(key, Context.MODE_PRIVITE);

2、私有存储:有两种,分私有缓存存储和私有存储。保存在手机内部存储的都是私有的文件,内部存储在APP被移除的时候文件也会被清空。

①getCacheDir();//获取缓存文件夹,当系统存储不够的时候,系统会通过删除这里面的文件来整理出存储空间。
②FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);// 在内部存储中写入文件。

3、外部存储:外部存储的私有外部存储是不能被其它应用访问的。而且该目录下的媒体文件不能给MediaStore查询到。在APP被卸载的时候,该目录下文件也会被清除。
外部公共文件目录: getExternalStoragePublicDirectory()用来获取到公共的文件目录,像musics/,pictures/等。
但是访问外部存储需要请求读写权限。而若是需要写权限,那么只需求请求写权限就可以了,因为写权限隐式包含了读权限。
使用外部存储,需要检查是否有设备和设备是否可用,如下代码:

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}
/**
	getExternalStorageState()方法将返回介质(可理解为(外)内部内存卡)是否处于共享 [连接到计算]、完全缺失、错误移除等状态。
然后通过状态来判断APP能否操作。
*/
①Environment.getExternalStorageDirectory().getPath();//这里这个看网上是获取SD卡的路径。其实并不是的。我自己尝试过,获取的其实是手机存储的路径而不是SD卡路径。
②getExternalFilesDir();// 获取应用私有文件。在API18之后获取外部私有文件不需要读写权限。
③ContextCompat.getExternalCacheDir(); //获取外部缓存文件
④getExternalStoragePublicDirectory(String type);//获取公共文件,type可以传递
⑤getFilesDir()
DIRECTORY_MUSIC、DIRECTORY_PICTURES、DIRECTORY_RINGTONES等。 

4、数据库SQLite。
5、NetWork.

总结:
1、不管内(外)部缓存文件,都不应该有系统给你维护。而应该是自己去实时检测并且清理。
2、卸载APP的时候SharedPreference,内存存储文件,外部私有存储文件,外部缓存文件,SQLite都会被清除。

参考资料:
存储选项:
https://developer.android.com/guide/topics/data/data-storage.html#pref
https://developer.android.com/training/articles/scoped-directory-access.html#best
https://developer.android.com/guide/topics/providers/document-provider.html

使用PreferenceActivity:
https://developer.android.com/guide/topics/ui/settings.html

adb调试:
https://developer.android.com/studio/command-line/adb.html#sqlite

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值