PersistentStorage的数据持久化是如何实现的?

阅读 583
avatarAI BotBETA

在HarmonyOS中,PersistentStorage的数据持久化是通过以下步骤实现的:

  1. 初始化持久化数据

    • 在应用启动时,开发者可以使用PersistentStorage.persistProp方法初始化需要持久化的数据。这个方法接受两个参数:持久化属性的名称和初始值。例如,PersistentStorage.persistProp('search_last_word', "")会初始化一个名为search_last_word的持久化属性,并将其值设置为空字符串。
  2. 绑定持久化数据到UI组件

    • 在UI组件中,开发者可以使用@StorageLink装饰器将持久化数据绑定到组件的属性上。这样,当持久化数据发生变化时,UI组件会自动更新以反映这些变化。例如,@StorageLink('search_last_word') search_last_word: string = ""会将名为search_last_word的持久化数据绑定到UI组件的search_last_word属性上。
  3. 在UI组件中使用持久化数据

    • 在UI组件的build方法中,开发者可以直接使用持久化数据。例如,可以在TextInput组件中显示持久化数据,并在按钮的点击事件中更新持久化数据。通过AppStorage.get('search_last_word')可以获取持久化属性的当前值,并将其设置为TextInput组件的文本。
  4. 数据持久化存储

    • PersistentStorage持久化后的数据会生成本地xml文件保存,文件路径通常为/data/app/el2/100/base/<bundleName>/haps/<hapName>/files/persistent_storage。这样,即使应用退出,持久化数据也会保存在设备上,并在下次应用启动时恢复。
  5. 数据的安全性和隐私保护

    • 持久化数据存储在本地,因此需要考虑数据的安全性和隐私保护。开发者应遵循数据最小化原则,合理规划持久化数据的存储和使用,并确保敏感数据得到适当的保护。

综上所述,PersistentStorage通过初始化持久化数据、绑定到UI组件、在UI组件中使用以及持久化存储到本地文件等步骤实现了数据的持久化。这使得开发者能够轻松地实现用户数据的保存和恢复,提升应用的用户体验和数据连续性。

1 个回答

PersistentStorage 是应用全局的 UI 状态存储方式之一。它可以和 UI 组件同步,属性支持双向绑定,数据支持本地或者远程。

新应用安装后首次启动运行:

  • 调用persistProp初始化PersistentStorage,首先查询在PersistentStorage本地文件中是否存在“aProp”,查询结果为不存在,因为应用是第一次安装。
  • 接着查询属性“aProp”在AppStorage中是否存在,依旧不存在。
  • 在AppStorage中创建名为“aProp”的number类型属性,属性初始值是定义的默认值47。
  • PersistentStorage将属性“aProp”和值47写入磁盘,AppStorage中“aProp”对应的值和其后续的更改将被持久化。
  • 在Index组件中创建状态变量@StorageLink('aProp') aProp,和AppStorage中“aProp”双向绑定,在创建的过程中会在AppStorage中查找,成功找到“aProp”,所以使用其在AppStorage找到的值47。

触发点击事件后:

  • 状态变量@StorageLink('aProp') aProp改变,触发Text组件重新刷新。
  • @StorageLink装饰的变量是和AppStorage中建立双向同步的,所以@StorageLink('aProp') aProp的变化会被同步回AppStorage中。
  • AppStorage中“aProp”属性的改变会同步到所有绑定该“aProp”的单向或者双向变量,在本示例中没有其他的绑定“aProp”的变量。
  • 因为“aProp”对应的属性已经被持久化,所以在AppStorage中“aProp”的改变会触发PersistentStorage,将新的改变写入本地磁盘。

后续启动应用:

  • 执行PersistentStorage.persistProp('aProp', 47),首先在PersistentStorage本地文件查询“aProp”属性,成功查询到。
  • 将在PersistentStorage查询到的值写入AppStorage中。
  • 在Index组件里,@StorageLink绑定的“aProp”为PersistentStorage写入AppStorage中的值,即为上一次退出应用存入的值。

本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题