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.ContextString 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 == 1int 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实例直接存取。

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

鸿蒙轻量级数据存储Preferences相关推荐

  1. 鸿蒙harmonyOS 使用轻量级数据存储Preferences出现的一个问题

    鸿蒙harmonyOS 使用轻量级数据存储Preferences出现的一个问题 文章目录 鸿蒙harmonyOS 使用轻量级数据存储Preferences出现的一个问题 前言 一.使用同一个上下文即可 ...

  2. 简单的数据存储--Preferences的使用

    Preferences是一种应用程序内部轻量级的数据存储方案.Preferences主要用于存储和查询简单的数据类型的数据,包括:boolean.int.float.long以及String等,存储方 ...

  3. Tray 轻量级数据存储 sharepreference的替代实现方案

    前言: 使用SharePreferences是不支持在多个进程中操作数据的(不同进程之间的存取和读取,不同进程同时存储相同的数据都会出现问题),所以我们需要自己去实现跨进程的数据存储,但是很多人会指出 ...

  4. android轻量级数据存储框架Hawk

    今天自己写demo学习的时候,发现了一个超级好用的数据存储框架Hawk,意外发现这个框架还可以存储List数据.下面总结用法如下: 1.在build.gradle下添加依赖 compile 'com. ...

  5. 8.1 Android Basic 数据存储 Preferences Dialog(使用对话框的Preferences)

    <<PrefsDemo_Dialog.zip>> Dialog(使用对话框的Preferences) 新建项目 PrefsDemo_Dialog 编辑res/layout/ma ...

  6. 使用share prefernces实现轻量级数据存储

    share prefernces就是个键值对的仓库. 由于share prefernces共享于整个应用,所以使用默认的就好. PreferenceManager.getDefaultSharedPr ...

  7. Android五大数据存储

    前言 数据存储可谓是Android中灰常灰常重要的一部分了.任何一个应用离不开数据的存储,有时需内存存储,有时需本地存储,还有时需要两个进程间传输数据,等等.那接下来介绍的五大存储中将包括了所有的应用 ...

  8. android数据存储心得,android学习心得 轻量级存储SharePreferences

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和St ...

  9. Android数据存储:Shared Preferences

    Android数据存储之SharedPreferences 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上, Android 为数据存储提供了如下几种方式: ...

  10. 鸿蒙开发-使用Storage实现数据存储

    场景 鸿蒙开发-从搭建todolist待办事项来学习组件与js之间的交互: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1183 ...

最新文章

  1. 在钉钉上怎么手写_胖·评测|亲测!磐度A5数字纸笔手写板能适配多少直播平台?...
  2. bs架构的系统能连接mysql吗_HTTP、BS架构
  3. 移动端设备标识码/设备唯一标识码/设备唯一性
  4. 侯捷面向对象高级编程(二)
  5. java tls 实例_grpc加密TLS初体验(go、java版本)
  6. vue全局变量的 定义与任意调用
  7. suoi14 子树查找 (dfs)
  8. JavaScript.Remove
  9. 【Bug Fix】Error : Can#39;t create table #39;moshop_1.#sql-534_185#39; (errno: 150)
  10. java线程异常终止_java线程莫名异常退出时,如何捕获异常信息
  11. 【Luogu1095】守望者的逃离
  12. 怎么找网页源文件位置_原神白铁块位置分布图 原神白铁块怎么找
  13. 神经网络图用什么软件做,图神经网络 图像处理
  14. 漫话Kubernetes的网络架构,该用NodePort还是Ingress还是load balancer?
  15. kibana本地安装
  16. Appium 自动化测试 滑动 Swipe 详解
  17. 离散数学复习集合之关系
  18. uvalive 6657 GCD XOR
  19. Kerberos鉴权后Spark程序连接Redis数据库,解决No Reachable node in cluster错误
  20. C# 绘制验证码图片

热门文章

  1. amoeba mysql_详解如何利用amoeba(变形虫)实现mysql数据库读写分离
  2. Flutter学习(三)
  3. 分布式 Git - 为项目做贡献
  4. java 解析 office系列文档
  5. JPush极光推送详解
  6. java NIO理论总结
  7. CSB专享实例部署操作手册
  8. Ubuntu 18.04.3 双屏显示 N卡驱动 问题解决
  9. 微信分享、极简微信分享、thinkphp微信分享、laravel微信分享、3分钟完成微信分享
  10. Excel画函数图像