
(一)HarmonyOS 中 ArkData 全面解析 原创
HarmonyOS 中 ArkData 全面解析
在 HarmonyOS 的生态体系中,ArkData(方舟数据管理)凭借其强大的功能,为开发者提供了一套完备的数据存储、管理和同步机制,在整个系统架构中占据着极为关键的地位。本文将深入探讨 ArkData 是什么,以及它在 HarmonyOS 中的定位与作用,并结合具体代码示例,帮助开发者快速上手。
ArkData 是什么
ArkData 作为 HarmonyOS 的核心数据管理框架,旨在打破不同应用、不同设备之间的数据交互壁垒,解决数据管理过程中的痛点,提升数据管理的效率和安全性能。
1. 标准化数据定义
ArkData 提供 HarmonyOS 跨应用、跨设备的统一数据类型标准,包含标准化数据类型(UTD)和标准化数据结构。UTD 的引入,让不同应用、不同设备之间的数据交互变得更加规范和一致,不仅降低了开发成本,还提升了用户体验。开发者可使用 ArkData 提供的接口创建和操作标准化数据结构,如uniformdatastruct.hyperlink和uniformdatastruct.plaintext,方便应用进行跨应用、跨设备的数据交互,比如文件预览、文件分享等场景。
2. 丰富的数据存储能力
ArkData 支持多种数据存储方式,开发者可根据数据特点选择合适的存储方案:
- 用户首选项(Preferences):提供轻量级配置数据的持久化能力,并支持订阅数据变化的通知能力。通常用于保存应用配置信息、用户偏好设置等,数据以文本形式保存在设备中,应用使用时会将文本中的数据全量加载到内存,访问速度快、效率高,但不适合存储大量数据。
- 键值型数据库(KV - Store):一种非关系型数据库,数据以 “键值” 对的形式组织、索引和存储,“键” 作为唯一标识符。适合存储很少数据关系和业务关系的业务数据,在分布式场景中,能降低解决数据库版本兼容问题的复杂度,以及数据同步过程中冲突解决的复杂度,更容易做到跨设备跨版本兼容。
- 关系型数据库(RelationalStore):以行和列的形式存储数据,广泛用于应用中的关系型数据处理,提供一系列增、删、改、查接口,开发者还能运行自定义 SQL 语句满足复杂业务场景需求。
3. 高效的数据管理功能
ArkData 提供了权限管理、数据备份恢复、数据共享框架等高效的数据管理能力,保障数据在整个生命周期内的安全性与可用性。例如,统一数据管理框架(UDMF)提供了数据跨应用、跨设备交互标准,定义了跨应用、跨设备数据交互过程中的数据语言,提升数据交互效率,同时提供安全、标准化数据流通通路,支持不同级别的数据访问权限与生命周期管理策略,实现高效的数据跨应用、跨设备共享。
4. 跨设备数据同步
ArkData 支持跨设备数据同步功能,分布式数据对象和关系型数据库能帮助开发者实现应用数据在不同设备之间的同步。以分布式对象为例,它支持内存对象跨设备共享能力;分布式数据库则支持跨设备数据库访问能力,极大地满足了多端协同场景的需求,如游戏应用、多人协作应用等。
ArkData 在 HarmonyOS 中的定位与作用
1. 构建全场景数据交互的桥梁
HarmonyOS 旨在打造全场景智能生态,ArkData 作为数据管理的核心框架,为不同设备、不同应用之间的数据交互提供了统一的标准和接口。在华为云空间中,ArkData 作为 HarmonyOS 统一的数据访问框架,通过操作系统底层能力打通,实现了云端数据和本地数据在设备上使用一体无感。用户在同一华为账号下,可通过智能 picker 直接选择云端数据与本地数据,无需下载云端数据到本地,真正打破了端云之间的隔阂。
2. 保障数据的安全与可靠性
在数据安全方面,ArkData 提供了一系列机制,如数据备份、数据恢复、数据加密等。键值型数据库和关系型数据库均支持数据库加密操作,在创建数据库时可通过相应参数设置是否加密,加密后的数据库只能通过接口访问,确保了数据的保密性和完整性。同时,基于设备分类和数据分级的访问控制,进一步保障了数据的安全性。
3. 助力开发者快速构建优质应用
ArkData 为开发者提供了丰富的接口和工具,降低了数据管理的开发难度。开发者只需调用 ArkData 提供的接口,就能轻松实现数据的存储、管理和同步,专注于业务逻辑的开发,从而快速构建安全可靠、体验良好的应用。
代码示例
1. 用户首选项数据存储
下面的代码展示了如何使用用户首选项实现数据的同步存储:
// 获得Preferences实例,这是与本地存储交互的接口
const preferences = getPreferences(this, LocalStorageLevel.PRIVATE);
// 使用putSync方法同步写入数据,并调用flush方法确保数据被保存
preferences.putSync('key', 'value');
preferences.flush();
2. 键值型数据库操作
下面的代码示例展示了如何创建一个加密的键值型数据库,并进行相关操作:
import { distributedKVStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';
let kvManager: distributedKVStore.KVManager | undefined = undefined;
let kvStore: distributedKVStore.SingleKVStore | undefined = undefined;
let context = getContext(this);
const kvManagerConfig: distributedKVStore.KVManagerConfig = {
context: context,
bundleName: 'com.example.datamanagertest',
};
try {
kvManager = distributedKVStore.createKVManager(kvManagerConfig);
console.info('Succeeded in creating KVManager.');
} catch (e) {
let error = e as BusinessError;
console.error(`Failed to create KVManager. Code:${error.code},message:${error.message}`);
}
if (kvManager!== undefined) {
kvManager = kvManager as distributedKVStore.KVManager;
try {
const options: distributedKVStore.Options = {
createIfMissing: true,
// 设置数据库加密
encrypt: true,
backup: false,
autoSync: false,
kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,
securityLevel: distributedKVStore.SecurityLevel.S2
};
kvManager.getKVStore<distributedKVStore.SingleKVStore>('storeId', options, (err, store: distributedKVStore.SingleKVStore) => {
if (err) {
console.error(`Fail to get KVStore. Code:${err.code},message:${err.message}`);
return;
}
console.info('Succeeded in getting KVStore.');
kvStore = store;
});
} catch (e) {
let error = e as BusinessError;
console.error(`An unexpected error occurred. Code:${error.code},message:${error.message}`);
}
}
if (kvStore!== undefined) {
kvStore = kvStore as distributedKVStore.SingleKVStore;
//进行后续操作
//...
}
3. 多对多跨应用数据共享
下面的代码展示了如何通过 UDMF 实现多对多跨应用数据共享:
import { unifiedDataChannel, uniformTypeDescriptor } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';
// 创建一个统一数据对象并插入到UDMF的公共数据通路中
let plainText = new unifiedDataChannel.PlainText();
plainText.textContent = 'hello world!';
let unifiedData = new unifiedDataChannel.UnifiedData(plainText);
// 指定要插入数据的数据通路枚举类型
let options: unifiedDataChannel.Options = {
intention: unifiedDataChannel.Intention.DATA_HUB
}
try {
unifiedDataChannel.insertData(options, unifiedData, (err, key) => {
if (err === undefined) {
console.info(`Succeeded in inserting data. key = ${key}`);
} else {
console.error(`Failed to insert data. code is ${err.code},message is ${err.message} `);
}
});
} catch (e) {
let error: BusinessError = e as BusinessError;
console.error(`Insert data throws an exception. code is ${error.code},message is ${error.message} `);
}
总结
ArkData 作为 HarmonyOS 数据管理的基石,为开发者提供了强大的数据管理功能,在构建全场景智能生态中发挥着不可替代的作用。通过本文的介绍,相信开发者对 ArkData 有了更深入的理解,能够在 HarmonyOS 应用开发中充分发挥其优势,打造出更优质的应用。
