鸿蒙轻量级数据存储Preferences

article/2025/6/29 14:20:28

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实例直接存取。

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


http://chatgpt.dhexx.cn/article/2uhsFKQL.shtml

相关文章

轻量级目标检测算法整理

随着目标检测算法的快速发展,以及终端应用的日渐广泛,工业界对深度学习网络在终端应用的关注度越来越高,尤其是对于如何保持速度和精度上的平衡,也形成了不小的研究热度。本篇整理了一些较新的轻量级目标检测网络,结合…

轻量级网络总结

文章目录 1. SqueezeNet2. ShuffleNet2.1 v12.2 v2 3. MobileNet3.1 v13.2 v23.3 v3 4. GhostNet4.1 v14.2 v2 1. SqueezeNet SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size 考虑到卷积层的参数量为 C i n ∗ C o u t ∗ K ∗ K …

轻量级c语言开发环境,几款轻量级的C/C++编写软件

因为有同学问我写C用什么软件好点。。。其实这些软件各有优势&#xff0c;只不过看自己需要罢了。 我下了个VS 2017.....不过太大了点。算下来20G左右&#xff0c;硬盘小点的笔记本直接没法玩......(我的就没问题&#xff0c;嘻嘻嘻)&#xff0c;要是你想用VS2017&#xff0c;我…

Synchronized原理(轻量级锁篇)

Synchronized原理&#xff08;轻量级锁篇&#xff09; 简述 介绍 轻量级锁是JDK1.6之中加入的新型锁机制&#xff0c;它名字中的“轻量级”是相对于使用操作系统互斥量来实现的传统锁而言的&#xff0c;因此传统的锁机制就称为“重量级”锁。首先需要强调一点的是&#xff0…

轻量级 android模拟器,【分享中控】轻量级中控系统

先上图: 这是一个简单的模拟器本地中控,自恋的说非常好用,它帮助了我成功开发无数款脚本,已经在多台电脑上稳定运行数月。 虽然不算强大,但是足以应付大部分的脚本开发需求。 [hide]注意 1. 使用此软件的前提是安装好 .Net Framework 4.5 运行环境,Win10自带此环境无需安…

浅析轻量级锁

从轻量级锁 来看锁机制。 (目前 上的唯一一张图。= =。 因为有些东西没有图的话 是很难理清楚的 - - )对象是否被某个线程的锁定的依据是, 对象头中记录的信息。 mark word 也叫对象标志词。对象头的信息内容是变化的,变化后是根据不同的锁标志位来描述对应的信息。 比如当…

14种轻量级网络综述 — 主干网络篇

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 作者丨VincentLee 来源丨晓飞的算法工程笔记 编辑丨极市平台 导读 早期的卷积神经很少考虑参数量和计算量的问题&#xff0c;由此轻量级网络诞生&#xff0c;其旨在保持模型精度基础上近一步减少模型参数量和…

神经网络学习小记录47——ShuffleNetV2模型的复现详解

神经网络学习小记录47——ShuffleNetV2模型的复现详解 学习前言什么是ShuffleNetV2ShuffleNetV21、所用模块2、网络整体结构 网络实现代码 学习前言 据说ShuffleNetV2比Mobilenet还要厉害&#xff0c;我决定好好学一下。 什么是ShuffleNetV2 这篇是ECCV2018关于轻量级模型的…

一个简单的dos命令实现无限弹窗,卡死电脑

教大家一个简单的dos命令实现无限弹窗&#xff0c;从而实现卡死电脑。 1.新建一个文本文件 2.在该文件里面输入 : start start cmd goto start 3.保存后并把此文件的.txt后缀改为.bat 提示&#xff1a;如果你的计算机不显示后缀拓展名&#xff0c;首先应先让显示拓展名再进行操…

Pycharm制作搞怪弹窗(声音强制最大,屏幕亮度强制最亮,按钮躲避,弹窗炸弹)

Pycharm制作搞怪弹窗(声音强制最大&#xff0c;屏幕亮度强制最亮&#xff0c;按钮躲避&#xff0c;弹窗炸弹&#xff09; 闲来无聊用python制作了一个搞怪的桌面弹窗程序&#xff0c;惊喜连连哦 运行动图 实现代码&#xff1a; import tkinter as tk import tkinter.font as…

Charles抓包出现弹窗问题或者无法抓包https问题汇总

一、重要问题总结 1、https抓包需要在电脑端和移动端都装上相应的证书&#xff01;不同的电脑、手机需要的证书可能不一样&#xff0c;如果不能正常工作&#xff0c;建议重新安装。 2、iOS10及以上系统&#xff0c;需要在安装charles证书后 在设置->通用->关于本机->…

python制作恶搞_Pycharm制作搞怪弹窗的实现代码

闲来无聊用python制作了一个搞怪的桌面弹窗程序,惊喜连连哦 运行动图 实现代码: import tkinter as tk import tkinter.font as tkFont # 引入字体模块 import time import sys import pygame import random import threading import win32api import wmi from tkinter.messa…

用Python写一个假的病毒炸弹(整蛊)

病毒炸弹 现在我们用Python来写一个假的病毒炸弹 弹窗实现 import tkinter as tk import random import threading import timedef boom():window tk.Tk()width window.winfo_screenwidth()height window.winfo_screenheight()a random.randrange(0, width)b random.ra…

bat 炸弹升级

转自&#xff1a;http://digi.163.com/15/0320/06/AL4LP0QD0016192R.html 第1页&#xff1a;什么是批处理炸弹&#xff1f; 最近网上流传一个叫做《大哥别杀我》视频纷纷遭到网友模仿&#xff0c;虽然我们都知道视频里出现的人大多都是群众演员&#xff0c;但还是会被视频中各种…

xss完成浏览器视窗炸弹

无聊&#xff0c;&#xff0c;&#xff0c;发个文章。 这个就是很简单的视窗炸弹&#xff0c;放在自己的 xss平台上&#xff0c;执行就会一直打开页面。初学者可以 试一试。 function WindowBomb() { var iCounter 0 // dummy counter while (true) { window.open(“https:/…

Linux fork炸弹以及预防办法

fork炸弹是什么&#xff1f; fork炸弹以极快的速度创建大量进程&#xff08;进程数呈以2为底数的指数增长趋势&#xff09;&#xff0c;并以此消耗系统分配予进程的可用空间使进程表饱和&#xff0c;而系统在进程表饱和后就无法运行新程序&#xff0c;除非进程表中的某一进程终…

弹窗炸弹恶搞整人

1.创建一个记事本文件 2.编辑文件内容 在文件中输入以下内容并保存 :start start cmd goto start3.实现弹窗炸弹 把文件扩展名改为.bat。 双击执行&#xff08;慎用&#xff09;&#xff0c;效果如下&#xff1a; 4.解除无线弹窗的方法 方法一&#xff1a; 新建个记事本…

python弹窗炸弹

当我们看某人不爽时&#xff0c;可以用这个&#xff1a; ​ import tkinter as tk import random import threading import timedef dow():window tk.Tk()window.title(你是SB)window.geometry("200x50" "" str(random.randrange(0, window.winfo_scre…

无限弹窗(bat代码 整人恶作剧)

炸弹弹窗&#xff0c;是使用bat制作的一个小程序&#xff0c;效果就是执行程序后会一直不停地弹出窗口&#xff0c;用来恶作剧。下面我们就来看看详细的教程。 打开文件&#xff0c;输入以下代码&#xff1a; :start start cmd goto start 点击文件&#xff0c;选择另存为 把文…

bat代码雨代码流星_怎么制作无限弹窗效果? 限弹窗代码bat文件分享

炸弹弹屏,也可以叫炸弹弹窗,是可以使用txt制作的一个小程序,效果就是执行程序后会一直不停地弹出窗口,就好像炸弹轰炸一样,如图所示,用来恶作剧很好玩。该怎么制作这个无限弹窗效果呢?下面我们就来看看详细的教程。 1、首先,如图所示,我们打开电脑,在桌面鼠标右键,新…