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
- Android存储-文件存储
- Android存储-file存储
- Android存储-- File 存储
- android存储---文件存储
- Android存储
- android存储
- Android存储
- Android存储
- android 存储
- Android 存储
- Android存储
- android存储
- android--存储
- android存储
- Android 存储
- Android存储
- Android存储
- Android存储
- 现代编译过程
- Java,JDBC连接数据库
- 算法竞赛入门经典 第二版 习题5-3 卡片游戏 Throwing cards away I uva10935
- 使用阿里的maven仓库
- 算法的时间复杂度
- Android存储
- Falcon(一)——数据集管理和数据处理平台
- codeforces 777C Alyona and Spreadsheet(预处理+思维)
- 92. Reverse Linked List II
- 为什么Java中1000==1000为false而100==100为true?
- IE\firfox\chrome的差异和兼容问题
- 像VS一样简单的打包“控制台”程序
- could not resolve host: github.com 问题解决办法
- springmvc入门