Android 本地缓存开源库 Reservoir 替代SharedPreferences
来源:互联网 发布:怎么开淘宝店详细步骤教程 编辑:程序博客网 时间:2024/05/21 22:44
一、Android SharedPreferences 简介
众所周知,SharedPreferences是一种轻型的Android数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。它的存储位置是在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。比较经典的使用方式例如用户输入框对过往登录账户的存储。实现SharedPreferences存储的步骤如下:
1、根据Context获取SharedPreferences对象
2、利用edit()方法获取Editor对象。
3、通过Editor对象存储key-value键值对数据。
4、通过commit()或apply()方法提交数据。
commit和apply方法的区别:
1.apply没有返回值而commit返回boolean表明修改是否提交成功
2.apply是将修改数据原子提交到内存,而后异步真正提交到硬件磁盘;而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。
3.apply方法不会提示任何失败的提示。
一般的话,建议使用apply,当然,如果是需要确保数据提交成功,且有后续操作的话,则需要用commit方法。
二、Reservoir 开源库的介绍
它的中文翻译是:蓄水池; 贮液器;储藏
顾名思义,它是一个用键值对存储数据的轻量级库,官方的文档介绍是:
1.项目引入:
在项目build.gradle文件中配置以下代码,然后点击Sync按钮同步一下代码:
repositories { jcenter()}
dependencies { compile 'com.anupcowkur:reservoir:3.1.0'}
2.初始化:
在使用之前,需要初始化Reservoir ,初始化最好是在应用的Application中初始化,并设置缓存内存大小,官方写的例子是2048b, 的内存,太小了,应该改大一点。一般来说设置1-2M左右就够用了,具体大小视自己项目而定。
这里我是设置的1M:
try { Reservoir.init(this, 1024*1024); //in bytes 1M} catch (Exception e) { //failure}如果想使用自己自定义的Gson实例:
try { Reservoir.init(this, 2048, mGsonInstance);} catch (Exception e) { //failure}
3.Put数据,保存到本地缓存:
数据的保存有同步和异步两种方式,异步使用有两个回调方法,同步则没有。具体使用哪种方式视项目情况而定:
3.1 采取异步的方式:
//async put: List<String> sList = new ArrayList<String>(); sList.add("one"); sList.add("two"); sList.add("three"); Reservoir.putAsync("mKey", sList, new ReservoirPutCallback() { @Override public void onSuccess() { //success } @Override public void onFailure(Exception e) { //error } });
3.2 采取同步的方式:
//Put a simple object try { Reservoir.put("mKey", mObject); } catch (Exception e) { //failure; }
4.读取缓存的键值对数据:
4.1 采取异步的方式:
//Get data Type resultType = new TypeToken<List<String>>() {}.getType(); Reservoir.getAsync("myKey", resultType, new ReservoirGetCallback<List<String>>() { @Override public void onSuccess(List<String> strings) { //success } @Override public void onFailure(Exception e) { //error } });
4.2 采取同步的方式:
//Get data Type resultType = new TypeToken<List<String>>() {}.getType(); try { Reservoir.get("myKey", resultType); } catch (Exception e) { //failure} }
4.3 检查键值是否存在
当你想要检查某一个键值对是否存在时,可用以下代码实现:try { boolean objectExists = Reservoir.contains("mKey");} catch (Exception e) {}
5.删除缓存的键值对数据:
Async delete (异步):
Reservoir.deleteAsync("mKey", new ReservoirDeleteCallback() { @Override public void onSuccess(MyClass myObject) { //success } @Override public void onFailure(Exception e) { //error }});
synchronous delete(同步)
try { Reservoir.delete("mKey");} catch (Exception e) { //failure}
5.清除缓存的Reservoir 数据:
Async clear(异步):
Reservoir.clearAsync(new ReservoirClearCallback() { @Override public void onSuccess() { try { assertEquals(0, Reservoir.bytesUsed()); } catch (Exception e) { } } @Override public void onFailure(Exception e) { }});
sync clear(同步):
try { Reservoir.clear();} catch (Exception e) { //failure}
RxJava下使用:
Put :
//Put a simple object Reservoir.putUsingObservable("myKey", myObject) returns Observable<Boolean>//Put collection List<String> strings = new ArrayList<String>(); strings.add("one"); strings.add("two"); strings.add("three"); Reservoir.putUsingObservable("myKey", strings) returns Observable<Boolean>
Get:
//Get a simple object Reservoir.getUsingObservable("myKey", MyClass.class) returns Observable<MyClass>//Get collection Type collectionType = new TypeToken<List<String>>() {}.getType(); Reservoir.getUsingObservable("myKey", String.class, collectionType) returns Observable<String>
Delete:
Reservoir.deleteUsingObservable("myKey") returns Observable<Boolean>
Clear:
Reservoir.clearUsingObservable() returns Observable<Boolean>
Reservoir项目GitHub地址: https://github.com/anupcowkur/Reservoir
- Android 本地缓存开源库 Reservoir 替代SharedPreferences
- Android SharedPreferences本地缓存
- Android本地数据存储: Reservoir
- 用Gson和SharedPreferences轻松构建android本地数据缓存
- Gson和SharedPreferences轻松构建android本地数据缓存
- 用Gson和SharedPreferences轻松构建android本地数据缓存
- Android中实现本地缓存,存储(SharedPreferences存储)
- Android SharedPreferences本地储存
- Android本地存储方案 SharedPreferences
- 用Gson和SharedPreferences构建本地数据缓存
- Android图片本地缓存
- Android -- ImageLoader本地缓存
- Android -- ImageLoader本地缓存
- Android -- ImageLoader本地缓存
- Android -- ImageLoader本地缓存
- Android -- ImageLoader本地缓存
- Android 之本地缓存
- android本地缓存ACache
- Redis安装和配置
- python 升级 pip
- 做游戏
- Sublime Text 3 快捷键
- css3动画简介以及动画库animate.css的使用
- Android 本地缓存开源库 Reservoir 替代SharedPreferences
- DB2 SQL语句的优化
- php 代码片段
- 区块链给物联网带来的变化
- 欢迎使用CSDN-markdown编辑器
- K Best POJ 3111 (二分,最大化平均値)
- 第一章
- SVN Server新建仓库,并创建钩子自动拉取代码
- 百练_3142:球弹跳高度的计算