关于数据储存,这个话题已经被反复讨论过很多次了,我是不建议把网络存储这种方式纳入到数据储存的范围的,因为这个和Android没多少关系,因此就有如下的分类:
- 本地储存(也称之为数据持久化,包含文件储存,SharedPreferences,SQLite储存和ContentProvider(内容提供者));
- 内存储存(静态变量、全局变量存值).
适用场景
如果app内有些数据是需要使用到上次该app关闭时的数据,比如下次启动app没有网络时要求显示之前的省市信息,那么无论,你有多么不愿意,本地储存是必要的,无非就是有数据时从内存先取,没有时从本地存储空间取;
内存储存相对于本地储存有着响应快,耗时低的优势,本地储存数据量大IO操作耗时长时甚至要在非UI线程来执行.这就意味着,能不用本地储存就不要用.
基本用法
- 使用SharedPreferences存储数据
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存。
它是什么样的处理方式呢? SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。 其本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
总结
我个人而言,使用的多点的就是sp储存,sqlite储存,文件储存;contentprovider使用的最少,用到基本就是调用系统的内容提供者获取一下联系人列表什么的;如果存储的是较复杂的javabean,那还是老老实实的用sqlite吧,别忘了增删改查放在工作线程;本地储存的话尤其要注意权限问题,7.1的这些储存权限已经是危险权限了,单单在AndroidManifest定义是没用的,需要配合使用动态权限申请(定制的系统就例外了,哈哈,自己定制的什么都好说);从性能最优的角度说,能不用本地储存就不要用,用到本地储存时,能用sp,就不要用sqlite;文件储存慎用…