ArkData:首选项——让数据在设备中安全的流动 原创
嘿,小伙伴们!👋 你是否曾想过,我们的手机和电脑里的数据是如何被保存下来的?今天,我们就来聊聊应用数据持久化的那些事儿,一起探索如何让数据在设备间自由旅行,就像拥有了自己的小翅膀一样!🦋
📂 应用数据持久化简介
在数字时代,数据就像是我们的宝藏,而应用数据持久化就是将这些宝藏安全地存放在设备上的魔法。无论是通过文件还是数据库,我们都能将内存中的数据保存下来,让它们变成永恒。💎
HarmonyOS提供了几种典型的数据存储形态,包括用户首选项、键值型数据库和关系型数据库。这些工具就像是不同的魔法盒子,帮助我们根据不同的需求选择合适的存储方式。🧰
🔑 用户首选项:轻量级数据的守护者
想象一下,你的应用需要记住用户的一些小习惯,比如字体大小或者是否开启夜间模式。这时,用户首选项(Preferences)就派上用场了。它提供了一种Key-Value键值型的数据存储方式,让我们能够轻松地保存和查询这些轻量级的数据。🔍
用户首选项就像是应用的小小记忆库,它将数据缓存在内存中,让我们能够快速读取数据。但记住,它不适合存放大量数据,因为它会占用更多的内存空间。🧠
🛠️ 用户首选项的运作机制
用户首选项的运作机制其实很简单。当我们通过ArkTS接口调用用户首选项时,系统会将数据加载到一个Preferences实例中。每个文件都对应一个唯一的Preferences实例,系统会将这个实例存储在内存中,直到我们主动移除它或者删除对应的文件。🗂️
📝 代码实战:用户首选项的ArkTS语言之旅
现在,让我们穿上编程的舞鞋,用ArkTS语言跳一支优雅的舞蹈。👯♀️
🌟 导入必要的模块
首先,我们需要导入@kit.ArkData模块,这是我们进行用户首选项操作的基础。
// 导入preferences模块
import { preferences } from '@kit.ArkData';
📝 获取Preferences实例
接下来,我们需要获取一个Preferences实例。这就像是打开我们的数据记忆库。
// 获取Preferences实例
let dataPreferences: preferences.Preferences | null = null;
class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage) {
let options: preferences.Options = { name: 'myStore' };
dataPreferences = preferences.getPreferencesSync(this.context, options);
}
}
📝 写入数据
现在,我们可以使用putSync()方法将数据保存到缓存的Preferences实例中。如果需要,我们还可以调用flush()方法将数据存储到持久化文件中。
// 检查键是否存在,如果不存在则写入数据
if (dataPreferences.hasSync('startup')) {
console.info("键 'startup' 已存在。");
} else {
console.info("键 'startup' 不存在。");
dataPreferences.putSync('startup', 'auto');
let uInt8Array1 = new util.TextEncoder().encodeInto("~!@#¥%……&*()——+?");
dataPreferences.putSync('uInt8', uInt8Array1);
}
📝 读取数据
使用getSync()方法获取数据,如果值为null或者非默认值类型,则返回默认数据。
// 获取数据
let val = dataPreferences.getSync('startup', 'default');
console.info("键 'startup' 的值是 " + val);
let uInt8Array2: preferences.ValueType = dataPreferences.getSync('uInt8', new Uint8Array(0));
let textDecoder = util.TextDecoder.create('utf-8');
val = textDecoder.decodeToString(uInt8Array2 as Uint8Array);
console.info("键 'uInt8' 的值是 " + val);
📝 删除数据
使用deleteSync()方法删除指定键值对。
// 删除数据
dataPreferences.deleteSync('startup');
📝 数据持久化
应用存入数据到Preferences实例后,可以使用flush()方法实现数据持久化。
// 数据持久化
dataPreferences.flush((err: BusinessError) => {
if (err) {
console.error(`数据持久化失败。代码:${err.code}, 信息:${err.message}`);
return;
}
console.info('数据持久化成功。');
})
📝 订阅数据变更
应用订阅数据变更需要指定observer作为回调方法。订阅的Key值发生变更后,当执行flush()方法时,observer被触发回调。
// 订阅数据变更
let observer = (key: string) => {
console.info('键 ' + key + ' 发生了变化。');
}
dataPreferences.on('change', observer);
dataPreferences.put('startup', 'manual', (err: BusinessError) => {
if (err) {
console.error(`设置键 'startup' 的值失败。代码:${err.code}, 信息:${err.message}`);
return;
}
console.info("设置键 'startup' 的值成功。");
if (dataPreferences !== null) {
dataPreferences.flush((err: BusinessError) => {
if (err) {
console.error(`数据持久化失败。代码:${err.code}, 信息:${err.message}`);
return;
}
console.info('数据持久化成功。');
})
}
})
📝 删除指定文件
使用deletePreferences()方法从内存中移除指定文件对应的Preferences实例,包括内存中的数据。若该Preference存在对应的持久化文件,则同时删除该持久化文件。
// 删除指定文件
preferences.deletePreferences(this.context, options, (err: BusinessError) => {
if (err) {
console.error(`删除Preferences失败。代码:${err.code}, 信息:${err.message}`);
return;
}
console.info('删除Preferences成功。');
})
🌟 用户首选项的应用场景
用户首选项适用于保存用户的个性化设置,如字体大小、夜间模式等。这些数据通常不会占用太多的内存,而且读取速度很快。🌙
🚧 约束限制
在使用用户首选项时,我们需要注意以下几点:
- 首选项无法保证进程并发安全,会有文件损坏和数据丢失的风险,不支持在多进程场景下使用。
- Key键为string类型,要求非空且长度不超过1024个字节。
- 如果Value值为string类型,请使用UTF-8编码格式,可以为空,不为空时长度不超过16 * 1024 * 1024个字节。
- 内存会随着存储数据量的增大而增大,所以存储的数据量应该是轻量级的,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。
通过用户首选项,我们可以轻松地保存和查询轻量级的用户个性化设置。这不仅提高了应用的用户体验,还让我们的数据管理变得更加简单和高效。🌟
希望这次旅行能让你对用户首选项有了更深的理解。如果你有任何问题,或者想要了解更多,欢迎继续探索和提问。🔍
让我们一起期待,在HarmonyOS的魔法下,我们的数字生活将变得更加精彩!🌟
感谢分享
挺不错,都讲到了