鸿蒙轻量级数据存储Preferences

1,概述

鸿蒙轻量级偏好数据库-Preferences。
轻量级偏好数据库主要提供轻量级Key-Value键值对形式操作,支持少量数据,数据存在在本地文件中,同时也加载在内存中,所以速度快,效率高,属于非关系型数据库,不宜存储大量数据。
运作机制如图:
运作机制
约束与限制:
(1)Key键为String类型,要求非空且大小不超过80个字符。
(2)如果Value值为String类型,可以为空但是长度不超过8193个字符。
(3)存储的数据应该是轻量级的,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。

2,使用

数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括整型、字符串型、布尔型、浮点型、长整型、字符串型 Set 集合。

(1)获取 Preferences 实例

读取指定文件,将数据加载到 Preferences 实例,用于数据操作。

   DatabaseHelper databaseHelper = new DatabaseHelper(context);// context入 参类型为ohos.app.Context
   String fileName = "name";
   Preferences preferences = databaseHelper.getPreferences(fileName);
(2)从指定文件读取数据

首先获取指定文件对应的 Preferences 实例,然后借助 Preferences API 读取数据。
java 接口 读取整型数据

int value = preferences.getInt("intKey", 0);
(3)将数据写入指定文件

首先获取指定文件对应的 Preferences 实例,然后借助 Preferences API 将数据写入 Preferences 实例,通过 flush 或者 flushSync 将 Preferences 实例持久化
异步:

   preferences.putInt("intKey", 3);
   preferences.putString("StringKey", "String value");
   preferences.flush();

同步:

   preferences.putInt("intKey", 3);
   preferences.putString("StringKey", "String value");
   preferences.flushSync();

区别:
flush 异步:插入数据不需要等待反馈即可插入下一组数据。
flushSync 同步:插入数据有反馈后再插入下一组数据。

(4)注册观察者

开发者可以向 Preferences 实例注册观察者,观察者对象需实现Preferences.PreferencesObserver 接口。flushSync() 或 flush() 执行后,该 Preferences 实例注册的所有观察者的 onChange() 方法都会被回调。不再需要观察者时请注销

private class PreferencesChangeCounter implements Preferences.PreferencesObserver {
       final AtomicInteger notifyTimes = new AtomicInteger(0);
       @Override    
       public void onChange(Preferences preferences, String key) {
           if ("intKey".equals(key)) {
               notifyTimes.incrementAndGet();        
           }    
       }
   }
   // 向preferences实例注册观察者
   PreferencesChangeCounter counter = new PreferencesChangeCounter();
   preferences.registerObserver(counter);
   // 修改数据preferences.putInt("intKey", 3);
   boolean result = preferences.flushSync();
   // 修改数据后,onChange方法会被回调,notifyTimes == 1
   int notifyTimes = counter.notifyTimes.intValue();
   // 向preferences实例注销观察者
   preferences.unRegisterObserver(counter);
(5)移除 Preferences 实例

从内存中移除指定文件对应的 Preferences 单实例。移除 Preferences 单实例时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题。

  DatabaseHelper databaseHelper = new DatabaseHelper(context);
   // 指定文件名称
   String fileName = "name";
   databaseHelper.removePreferencesFromCache(fileName);
(6)删除指定文件

从内存中移除指定文件对应的 Preferences 单实例,并删除指定文件及其备份文件、损坏文件。删除指定文件时,应用不允许再使用该实例进行数据操作,否则会出现数据一致性问题

   DatabaseHelper databaseHelper = new DatabaseHelper(context);
   // 指定文件名称
   String fileName = "name";
   boolean result = databaseHelper.deletePreferences(fileName);
(7)移动指定文件

从源路径移动文件到目标路径。移动文件时,应用不允许再操作该文件数据,否则会出现数据一致性问题。

 Context targetContext = XXX;
   DatabaseHelper databaseHelper = new DatabaseHelper(targetContext);
   // 指定文件名称
   String srcFile = "srcFile";
   String targetFile = "targetFile";
   Context srcContext = XXX;
   boolean result = databaseHelper.movePreferences(srcContext,srcFile,targetFile);

3,总结

(1)Preferences数据既写入到本地文件中又在内存缓存map中,数据写入在内存中占用内存资源,说明不宜大量数据存储。
(2)鸿蒙Preferences在写入或更新数据的时候会有同步或异步两种选择,在数据较少,操作量不大的时候建议使用同步flushSync操作方式。而异步操作一般是在数据量大,操作时间长情况下通过队列排队处理,一般较少使用。
(3)鸿蒙Preferences的存储数据每次都会清空之前的数据,每次会保留新的数据,而不是增量存储。
(4)跟安卓相比鸿蒙已经不需要通过Editor去put数据了,而通过Preferences实例直接存取。

声明:该博客大部分信息来自于鸿蒙官方文档。少部分自己总结,如果不明白请参考官方文档。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值