HarmonyOS 鸿蒙Next中怎么持续化数据,有哪些方法?
HarmonyOS 鸿蒙Next中怎么持续化数据,有哪些方法?
【解决方案】
应用数据持久化请参考:应用数据持久化。
更多关于HarmonyOS 鸿蒙Next中怎么持续化数据,有哪些方法?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
AppStorage:用于应用级别的状态管理,适用于需要在整个应用中共享的数据。
PersistentStorage:用于持久化存储数据,即使应用关闭后数据也不会丢失
Preferences 首选项 : 用户首选项为应用提供Key-Value键值型的数据存储能力,支持应用持久化轻量级数据,并对其进行增删除改查等。该存储对象中的数据会被缓存在内存中,因此它可以获得更快的存取速度。
Preferences与PersistentStorage的区别
PersistentStorage在UI之后,Preferences在UI之前
用户首选项(Preferences)—存储轻量级键值对数据,例如主题、字体
// 初始化首选项实例
import { preferences } from '@kit.ArkData';
let options: preferences.Options = {
name: 'myStore',
storageType: preferences.StorageType.GSKV
};
let dataPreferences = preferences.getPreferencesSync(context, options);
// 写入数据(同步到内存)
dataPreferences.putSync('theme', 'dark');
dataPreferences.flush(); // 持久化到文件
// 读取数据
let theme = dataPreferences.getSync('theme', 'default');
键值型数据库(KV-Store)—分布式跨设备同步的非结构化数据(如商品价格)
// 创建数据库管理器
import { distributedKVStore } from '@kit.ArkData';
let kvManager: distributedKVStore.KVManager;
kvManager = distributedKVStore.createKVManager({
context: context,
bundleId: 'com.example.demo'
});
// 打开数据库实例
let kvStore: distributedKVStore.SingleKVStore;
kvStore = kvManager.getKVStore('myKvStore', {
createIfMissing: true
});
// 写入数据(支持异步操作)
kvStore.put('price', '99.9', (err) => {
if (!err) console.info('Succeeded in putting data');
});
// 查询数据
kvStore.get('price', (err, data) => {
if (!err) console.info(`Value:${data}`);
});
关系型数据库(RelationalStore)—复杂结构化数据(如订单记录、学生信息)
// 创建数据库表
import { relationalStore } from '@kit.ArkData';
const STORE_CONFIG = {
name: 'RdbTest.db',
securityLevel: relationalStore.SecurityLevel.S3
};
let store: relationalStore.RdbStore;
relationalStore.getRdbStore(context, STORE_CONFIG, (err, rdbStore) => {
store = rdbStore;
store.executeSql('CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY, NAME TEXT)');
});
// 插入数据
store.insert('EMPLOYEE', { ID: 1, NAME: '张三' });
// 查询数据
store.query({ predicates: 'ID = ?' }, , (err, resultSet) => {
if (resultSet.rowCount > 0) {
resultSet.goToFirstRow();
let name = resultSet.getString(resultSet.getColumnIndex('NAME'));
}
});
文件系统—大文件(如图片、音视频)或自定义格式数据
// 写入文件
import { fileIo } from '@kit.ArkIO';
let path = context.filesDir + '/data.txt';
let text = 'Hello HarmonyOS';
fileIo.writeText(path, text, (err) => {
if (!err) console.info('Write succeeded');
});
// 读取文件
fileIo.readText(path, (err, data) => {
if (!err) console.info(`Content:${data}`);
});
PersistenceV2(UI状态持久化—自动保存/恢复界面状态(如列表滚动位置)
// 绑定持久化存储
import { PersistentStorage } from '@kit.ArkUI';
PersistentStorage.persistProp('scrollPos', 0); // 初始化默认值
// 组件中同步状态
@Entry
@Component
struct MyComponent {
@StorageLink('scrollPos') scrollPos: number = 0;
build() {
List() {
ForEach(this.items, (item) => {
ListItem() {/*...*/}
})
}
.onScroll((offset: number) => {
this.scrollPos = offset; // 自动持久化
})
}
}
持久化有这几种:
- 用户首选项:通过用户首选项实现数据持久化
- 键值型数据库:通过键值型数据库实现数据持久化
- 关系型数据库:通过关系型数据库实现数据持久化
- 持久化UI存储状态:PersistentStorage:持久化存储UI状态
你好。
所谓的持久化数据,和在内存中的数据正好相反。
APP启动后,数据一直存在,退后重新进入,数据就清除了,这种就是内存中的数据。
而持久化数据,就是为了APP退出重新进入,还能拿到数据的场景,这也是为什么要做本地持久化数据。
一般持久化数据分为轻量级和重量级。
轻量级,可以放到首选项中进行持久化。类似于 Android SharedPreferences
和 iOS NSUserDefaults
。
重量级,就是放到本地沙箱下,或者数据库中。
鸿蒙Next中数据持久化方法主要有:
- 轻量级Preferences,用于存储键值对;
- 分布式数据对象DataObject,支持跨设备同步;
- 关系型数据库RDB,支持SQLite操作;
- 分布式数据库DistributedDB,实现多设备协同;
- 文件系统API,包括应用沙箱和公共目录访问。
Preferences适用于简单配置,RDB适合结构化数据,DistributedDB专为跨设备场景设计。
在HarmonyOS Next中,数据持久化主要有以下几种方法:
-
首选项(Preferences):适合存储简单的键值对数据,如应用配置信息。使用@ohos.data.preferences模块实现。
-
关系型数据库(Relational Database):基于SQLite,适合结构化数据存储。通过@ohos.data.relationalStore模块操作。
-
对象关系映射(ORM):通过@ohos.data.orm框架简化数据库操作。
-
分布式数据服务(Distributed Data Object):支持跨设备数据同步,使用@ohos.data.distributedData模块。
-
文件存储:通过@ohos.file.fs API进行文件读写,适合非结构化数据。
-
轻量级存储(Storage):类似Web的localStorage,使用@ohos.data.storage模块。
每种方法适用于不同场景,可根据数据量大小、结构复杂度、是否需要跨设备同步等需求选择。