一、核心概念与应用价值​

       在 ArkTS 开发体系中,PersistentStorage作为状态持久化的核心组件,肩负着数据长期存储与管理的重要使命。其核心功能在于确保应用数据在设备重启、应用关闭等场景下不丢失,极大提升了应用的可用性与用户体验。无论是记录用户个性化配置,还是保存应用运行状态数据,PersistentStorage都为应用提供了稳定的数据存储基石。​

二、存储模型与数据类型支持​

PersistentStorage采用经典的键值对(Key-Value)存储模型,以直观、高效的方式实现数据的读写。开发者通过定义唯一的键(Key)标识数据,以值(Value)存储具体信息。在数据类型支持上,它不仅涵盖字符串、数字、布尔值等基本类型,还可处理对象、数组等复杂数据结构。例如,在新闻类应用中,可将用户浏览历史以 JSON 格式序列化后存储,读取时反序列化还原数据结构,便于后续分析与展示。​

三、核心操作接口详解​

3.1 数据写入(setItem)​

       setItem方法用于将数据写入存储,接收键和值作为参数,返回 Promise 对象用于处理操作结果。通过then方法可执行写入成功后的逻辑,catch方法捕获写入过程中的错误。如将用户设置的主题模式存储时,可调用PersistentStorage.setItem('theme_mode', 'dark'),并在then回调中提示用户设置成功。​

实例:LocalStorage和AppStorage都是运行时的内存,在应用退出后就没有了,如果要在应用退出后再次启动依然能保存选定的结果,这就需要用到PersistentStorage。

PersistentStorage.persistProp<string>('info','宇智波带土·白面具')

@Entry
@Component
struct PersistentStoragePage01 {
  @StorageLink('info')
  info:string=''

  build() {
    Row() {
      Column() {
        Text(this.info)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            this.info+='!'
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

 核心步骤:

  1. 初始化PersistentStorage
  2. 通过 AppStorage 获取并修改数据
  3. 重启应用,检测结果

3.2 数据读取(getItem)​

getItem方法用于从存储中获取数据,传入键后返回 Promise 对象。在then回调中可获取对应值,若键不存在则返回null。例如,在启动应用时,通过PersistentStorage.getItem('theme_mode')获取用户主题设置,据此渲染应用界面。​

注意

  • 可以存储被JSON.stringify()和JSON.parse()重构的对象。Date, Map, Set等内置类型则不支持,以及对象的属性方法不支持持久化。
  • 如果是嵌套对象(对象数组,对象的属性是对象等)。修改单个属性无法写回到PersistentStorage中, 需要替换整个对象。
  • 不支持 undefined 和 null
  • interface fruits {
      name: string
      price: number
    }
    
    // 初始化仓库
    PersistentStorage.persistProp<fruits[]>('fruits', [
      { name: '西瓜', price: 22 },
      { name: '桃子', price: 11 },
      { name: '菠萝', price: 15 }
    ])
    
    
    @Entry
    @Component
    struct Index {
      @StorageLink('foods')
      fruits: fruits[] = []
    
      build() {
        Column({ space: 20 }) {
          ForEach(this.fruits, (item: fruits) => {
            Text('name: ' + item.name)
              .fontSize(30)
              .onClick(() => {
                // AppStorage.set('foods', [{ name: '西瓜-加冰', price: 12 }])
                this.fruits[0] = { name: '西瓜-加冰-沙瓤', price: 12 }
              })
          })
    
        }
        .width('100%')
        .height('100%')
      }
    }

3.3 数据删除与清空​

removeItem方法用于删除指定键的数据,满足数据清理需求;clear方法则可清空所有存储数据,适用于应用重置等场景。例如,当用户注销账户时,可调用PersistentStorage.clear()删除所有个人相关数据。​

(此处不做演示)

四、安全机制设计​

4.1 沙盒隔离​

PersistentStorage采用沙盒机制,将每个应用的数据独立存储,避免不同应用间的数据非法访问与泄露,从底层保障数据安全。​

4.2 数据加密​

对于密码、支付信息等敏感数据,开发者可结合 AES、RSA 等加密算法,在存储前对数据加密,读取时解密,进一步增强数据安全性。​

五、性能优化策略​

5.1 缓存机制​

PersistentStorage内置缓存机制,对频繁读取的数据进行缓存,减少磁盘操作,提升数据读取效率。当应用多次请求相同数据时,可直接从缓存获取,显著缩短响应时间。​

5.2 数据管理优化​

    开发者需合理控制存储数据量,避免因存储过多数据导致性能下降。定期清理不再使用的数据,采用分页存储等策略,也是优化性能的有效手段。

​       总之,我们常用的两种储存方式形成互补关系 ——APPStorage解决应用内部高效状态流转问题,PersistentStorage解决数据持久化存储问题。本文主要阐述PersistentStorage,其他数据储存方式请关注后续文章

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐