Android存储

来源:互联网 发布:国际阿里云注册 编辑:程序博客网 时间:2024/06/07 13:41

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可以传递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

0 0
原创粉丝点击