HarmonyOS学习路之开发篇—数据管理(轻量级数据存储)

这篇具有很好参考价值的文章主要介绍了HarmonyOS学习路之开发篇—数据管理(轻量级数据存储)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

轻量级数据存储概述

轻量级数据存储适用于对Key-Value结构的数据进行存取和持久化操作。应用获取某个轻量级存储对象后,该存储对象中的数据将会被缓存在内存中,以便应用获得更快的数据存取速度。应用也可以将缓存的数据再次写回文本文件中进行持久化存储,由于文件读写将产生不可避免的系统资源开销,建议应用减少对持久化文件的读写频率。

基本概念

  • Key-Value数据结构

    一种键值结构数据类型。Key是不重复的关键字,Value是数据值。

  • 非关系型数据库

    区别于关系数据库,不保证遵循ACID(Atomic、Consistency、Isolation及Durability)特性,不采用关系模型来组织数据,数据之间无关系。

运作机制

  1. 应用通过指定Preferences文件将其中的数据加载到Preferences实例,系统会通过静态容器将该实例存储在内存中,同一应用或进程中每个文件仅存在一个Preferences实例,直到应用主动从内存中移除该实例或者删除该Preferences文件。
  2. 应用获取到Preferences文件对应的实例后,可以从Preferences实例中读取数据,或者将数据存入Preferences实例中。通过调用flush或者flushSync方法可以将Preferences实例中的数据回写到文件里。

图1 轻量级数据存储运作机制

HarmonyOS学习路之开发篇—数据管理(轻量级数据存储),HarmonyOS 学习,学习,轻量级存储,Preferences,harmonyos,DatabaseHelper

 

约束与限制

  • 因Preferences实例会加载到内存中,建议存储的数据不超过一万条,并及时清理不再使用的实例,以便减少非内存开销。
  • 数据中的key为string类型,要求非空且字符长度不超过80个。
  • 当数据中的value为string类型时,允许为空,字符长度不超过8192个。
  • 当value值为字符串型Set集合类型时,要求集合元素非空且字符长度不超过8192个。

轻量级数据存储开发

场景介绍

轻量级数据存储功能通常用于保存应用的一些常用配置信息,并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中,这些文件可以持久化地存储在设备上。需要注意的是,应用访问的实例包含文件所有数据,这些数据会一直加载在设备的内存中,直到应用主动从内存中将其移除前,应用可以通过Preferences的API进行数据操作。

接口说明

轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括整型、字符串型、布尔型、浮点型、长整型、字符串型Set集合。

创建存储实例

读取指定文件,将数据加载到Preferences实例,即可创建一个存储实例,用于数据操作。

表1 轻量级数据存储实例创建接口

类名

接口名

描述

DatabaseHelper

DatabaseHelper(Context context)

DatabaseHelper是数据操作的辅助类。

DatabaseHelper

Preferences getPreferences(String name)

获取数据存储文件对应的Preferences单实例,用于数据操作。数据文件存放在由上下文指定的目录里,该路径会因指定不同的上下文存在差异。

存入数据

通过Put系列方法,可以增加或修改Preferences实例中的数据。

表2 轻量级偏好数据存入接口

类名

接口名

描述

Preferences

Preferences putInt(String key, int value)

设置Preferences实例中键对应的int类型的值。

Preferences

Preferences putString(String key, String value)

设置Preferences实例中键对应的String类型的值。

读取数据

通过调用Get系列方法,可以读取Preferences中的数据。

表3 轻量级数据读取接口

类名

接口名

描述

Preferences

int getInt(String key, int defValue)

获取键对应的int类型的值。

Preferences

float getFloat(String key, float defValue)

获取键对应的float类型的值。

数据持久化

通过执行flush方法,应用可以将缓存的数据再次写回文本文件中进行持久化存储。

表4 轻量级数据持久化接口

类名

接口名

描述

Preferences

void flush()

将Preferences实例异步写入文件。

Preferences

boolean flushSync()

将Preferences实例同步写入文件。

订阅数据变化

订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush方法时,PreferencesObserver被回调。

表5 轻量级数据变化订阅接口

类名

接口名

描述

Preferences

void registerObserver(PreferencesObserver preferencesObserver)

订阅数据变化。

Preferences

void unRegisterObserver(PreferencesObserver preferencesObserver)

注销订阅。

Preferences.PreferencesObserver

void onChange(Preferences preferences, String key)

订阅者的回调方法,数据变化会触发回调该方法。

删除数据文件

通过调用以下两种接口,可以删除数据实例或对应的文件。

表6 轻量级数据存储删除接口

类名

接口名

描述

DatabaseHelper

boolean deletePreferences(String name)

将Preferences实例从内存中移除,同时删除其在设备上的持久化文件。

DatabaseHelper

void removePreferencesFromCache(String name)

仅将Preferences实例从内存中移除。

移动数据文件

表7 轻量级数据存储移动接口

类名

接口名

描述

DatabaseHelper

boolean movePreferences(Context sourceContext, String sourceName, String targetName)

移动数据持久化文件。

开发步骤

获取Preferences实例。

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

Context context = getContext(); // 数据文件存储路径:/data/data/{PackageName}/{AbilityName}/preferences。
// Context context = getApplicationContext(); // 数据文件存储路径:/data/data/{PackageName}/preferences。
DatabaseHelper databaseHelper = new DatabaseHelper(context); // context入参类型为ohos.app.Context。
String fileName = "test_pref"; // fileName表示文件名,其取值不能为空,也不能包含路径,默认存储目录可以通过context.getPreferencesDir()获取。
Preferences preferences = databaseHelper.getPreferences(fileName);

读取数据。

使用Preferences get方法读取数据。

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

数据持久化。

应用存入数据到Preferences实例后,可以通过flush或者flushSync方法将Preferences实例回写到文件中。

preferences.flush();  // 异步方法
bool result = preferences.flushSync();  // 同步方法

订阅数据变化。

应用订阅数据变化需要指定PreferencesObserver作为回调方法。订阅的key的值发生变更后,当执行flush方法时,PreferencesObserver被触发回调。不再需要PreferencesObserver时请注销。

private class PreferencesObserverImpl implements Preferences.PreferencesObserver {
   
    @Override    
    public void onChange(Preferences preferences, String key) {
        if ("intKey".equals(key)) {
           HiLog.info(LABLE, "Change Received:[key=value]");        
        }    
    }
}

// 订阅数据变化
PreferencesObserverImpl observer = new PreferencesObserverImpl();
preferences.registerObserver(observer);
// 修改数据
preferences.putInt("intKey", 3);
// 触发订阅者回调方法执行
preferences.flush();
// 修改数据后,observer的onChange方法会被回调
// 注销订阅
preferences.unRegisterObserver(observer);

移除Preferences实例。

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

DatabaseHelper databaseHelper = new DatabaseHelper(context);
String fileName = "name"; // fileName表示文件名,其取值不能为空,也不能包含路径。
databaseHelper.removePreferencesFromCache(fileName);

删除指定文件。

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

DatabaseHelper databaseHelper = new DatabaseHelper(context);
String fileName = "name"; // fileName表示文件名,其取值不能为空,也不能包含路径。
boolean result = databaseHelper.deletePreferences(fileName);

移动指定文件。

从源路径移动文件到目标路径。移动文件时,应用不允许再操作该文件数据,否则会出现数据一致性问题。文章来源地址https://www.toymoban.com/news/detail-540172.html

Context targetContext = getContext();
DatabaseHelper databaseHelper = new DatabaseHelper(targetContext);
String srcFile = "srcFile"; // srcFile表示源文件名或者源文件的绝对路径,不能为相对路径,其取值不能为空。当srcFile只传入文件名时,srcContext不能为空。
String targetFile = "targetFile"; // targetFile表示目标文件名,其取值不能为空,也不能包含路径。
Context srcContext = getApplicationContext();
boolean result = databaseHelper.movePreferences(srcContext, srcFile, targetFile);

到了这里,关于HarmonyOS学习路之开发篇—数据管理(轻量级数据存储)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 六)

    AppStorage是应用全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。 和LocalStorage不同的是,LocalStorage是页面级的,通常应用于页面内的数据共享。而对于AppStorage,是应用级的全局状态共享。 AppStorage是在应用启动

    2024年02月20日
    浏览(28)
  • HarmonyOS学习路之开发篇—设备管理(设备标识符)

    定义 网络设备节点通信标识符,是分布式软总线提供的一种非永久性标识符。NetworkID基于Java原生的UUID接口随机生成,长度为32字节,使用十六进制表示。主要用于业务调用分布式能力时,标识分布式网络内的设备节点。 NetworkID 举例: 6B97BC8F6F85A2A1A6E0E262111F42D6A8541CBFF6CAF688F

    2024年02月13日
    浏览(26)
  • HarmonyOS学习路之开发篇—设备管理(控制类小器件)

    控制类小器件指的是设备上的LED灯和振动器。其中,LED灯主要用作指示(如充电状态)、闪烁功能(如三色灯)等;振动器主要用于闹钟、开关机振动、来电振动等场景。 控制类小器件主要包含以下四个模块:控制类小器件API、控制类小器件Framework、控制类小器件Service、H

    2024年02月12日
    浏览(24)
  • HarmonyOS学习路之开发篇—流转

    随着全场景多设备生活方式的不断深入,用户拥有的设备越来越多,每个设备都能在适合的场景下提供良好的体验,例如:手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。但是,每个设备也有使用场景的局限,例如:在电视上输入文本相对手机来说是非常

    2024年02月15日
    浏览(23)
  • HarmonyOS学习路之开发篇—AI功能开发(分词)

    随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征。准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要。 分词作为自然语言处理领域的基础研究,衍生出各类不同的文本处理相关应用。 分词

    2024年02月11日
    浏览(36)
  • HarmonyOS学习路之开发篇—AI功能开发(实体识别)

    实体识别能够从自然语言中提取出具有特定意义的实体,并在此基础上完成搜索等一系列相关操作及功能。 实体识别覆盖范围大,能够满足日常开发中对实体识别的需求,让应用体验更好。识别准确率高,能够准确地提取到实体信息,对应用基于信息的后续服务形成关键影响

    2024年02月11日
    浏览(27)
  • HarmonyOS学习路之开发篇—AI功能开发(语音播报)

    语音播报(Text to Speech,下文简称TTS),基于华为智慧引擎(HUAWEI HiAI Engine)中的语音播报引擎,向开发者提供人工智能应用层API。该技术提供将文本转换为语音并进行播报的能力。 支持超长文本播报,最大文本长度为100000个字符。 语音播报不支持多线程调用。 实时语音交

    2024年02月11日
    浏览(54)
  • HarmonyOS学习路之开发篇—多媒体开发(相机开发 二)

    Camera操作类,包括相机预览、录像、拍照等功能接口。 接口名 描述 triggerSingleCapture​(FrameConfig frameConfig) 启动相机帧的单帧捕获。 triggerMultiCapture​(ListFrameConfig frameConfigs) 启动相机帧的多帧捕获。 configure​(CameraConfig config) 配置相机。 flushCaptures​() 停止并清除相机帧的捕获

    2024年02月11日
    浏览(30)
  • HarmonyOS学习路之开发篇—多媒体开发(相机开发 一)

    HarmonyOS相机模块支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照、连拍和录像等。 相机静态能力 用于描述相机的固有能力的一系列参数,比如朝向、支持的分辨率等信息。 物理相机 物理相机就是独

    2024年02月10日
    浏览(43)
  • HarmonyOS学习路之开发篇—多媒体开发(图像开发 二)

    图像编码就是将PixelMap图像编码成不同存档格式图片,用于后续其他处理,比如保存、传输等。当前仅支持JPEG格式。 ImagePacker主要用于图像编码。 接口名 描述 create() 创建图像打包器实例。 initializePacking(byte[] data, PackingOptions opts) 初始化打包任务,将字节数组设置为打包后输

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包