鸿蒙:使用AppStorageV2实现跨Ability共享

1、前言

如果你的应用有多个ability,那么该如何在多个ability之间跳转和传输数据呢?很简单,使用AppStorageV2状态管理即可实现。

本篇博客带领大家写个练手的项目,学习体验 使用AppStorageV2实现跨Ability共享。

2、参考文档

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-v1-v2-migration-application-and-others#appstorage-appstoragev2https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-v1-v2-migration-application-and-others#appstorage-appstoragev2

3、核心思路

通过AppStorageV2实现不同 Ability 间的数据共享。

  1. 定义MyStorage作为共享数据载体,用@ObservedV2和@Trace标记实现数据监听。
  2. 两个 Ability 的组件均通过AppStorageV2.connect连接到同一'storage'标识的实例,实现数据同步。
  3. 跳转通过startAbility+Want指定目标 Ability,数据传递不依赖 Want 参数,而是通过共享的MyStorage实例实时同步。

4、核心代码

复制代码
  @Local storage: MyStorage = AppStorageV2.connect(MyStorage, 'storage', () => new MyStorage())!;

     let wantInfo: Want = {
            bundleName: 'com.example.harmonydemo', // 替换成AppScope/app.json5里的bundleName
            abilityName: 'EntryAbility'
          };
          this.context.startAbility(wantInfo);

5、运行效果图

6、完整代码

EntryAbility的Index.ets 完整代码:

复制代码
import { common, Want } from '@kit.AbilityKit';
import { AppStorageV2 } from '@kit.ArkUI';

@ObservedV2
export class MyStorage {
  @Trace count: number = 0
}

@Entry
@ComponentV2
struct Index02 {
  @Local storage: MyStorage = AppStorageV2.connect(MyStorage, 'storage', () => new MyStorage())!;
  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;

  build() {
    Column() {
      Text("不同Ability之间的跳转传参示例")
        .fontWeight(FontWeight.Bold)
        .fontSize(26)
      Column() {
        Text(`EntryAbility 数值: ${this.storage.count}`)
          .fontSize(30)
          .onClick(() => {
            this.storage.count++;
          })
        Button('跳转到ApplicationAbility').onClick(() => {
          try {
            let wantInfo: Want = {
              bundleName: 'com.example.harmonydemo', // 替换成AppScope/app.json5里的bundleName
              abilityName: 'ApplicationAbility'
            };
            this.context.startAbility(wantInfo);
          } catch (e) {
            console.error('Index02', 'startAbility failed');
          }
        })
      }
      .layoutWeight(1)
      .width('100%')
      .alignItems(HorizontalAlign.Center)
      .justifyContent(FlexAlign.Center)
    }
    .justifyContent(FlexAlign.SpaceBetween)
    .height('100%')

  }
}

ApplicationAbility的Index.ets 完整代码:

复制代码
import { common, Want } from '@kit.AbilityKit';
import { AppStorageV2 } from '@kit.ArkUI';

@ObservedV2
export class MyStorage {
  @Trace count: number = 0
}

@Entry
@ComponentV2
struct Index {
  @Local storage: MyStorage = AppStorageV2.connect(MyStorage, 'storage', () => new MyStorage())!;
  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;

  build() {
    Column() {
      Text("不同Ability之间的跳转传参示例")
        .fontSize(26)
        .fontWeight(FontWeight.Bold)
      Column() {
        Text(`ApplicationAbility 数值: ${this.storage.count}`)
          .fontSize(30)
          .onClick(() => {
            this.storage.count++;
          })
        Button('跳转到ApplicationAbility').onClick(() => {
          let wantInfo: Want = {
            bundleName: 'com.example.harmonydemo', // 替换成AppScope/app.json5里的bundleName
            abilityName: 'EntryAbility'
          };
          this.context.startAbility(wantInfo);
        })
      }
      .width('100%')
      .layoutWeight(1)
      .justifyContent(FlexAlign.Center)
      .alignItems(HorizontalAlign.Center)

    }
    .justifyContent(FlexAlign.SpaceBetween)
    .height('100%')

  }
}
相关推荐
小镇敲码人8 小时前
探索华为CANN框架中的Ops-NN仓库
华为·cann·ops-nn
lbb 小魔仙9 小时前
【HarmonyOS实战】OpenHarmony + RN:自定义 useValidator 表单验证
华为·harmonyos
仓颉编程语言10 小时前
鸿蒙仓颉编程语言挑战赛二等奖作品:TaskGenie 打造基于仓颉语言的智能办公“任务中枢”
华为·鸿蒙·仓颉编程语言
一起养小猫10 小时前
Flutter for OpenHarmony 实战:扫雷游戏完整开发指南
flutter·harmonyos
小哥Mark13 小时前
Flutter开发鸿蒙年味 + 实用实战应用|绿色烟花:电子烟花 + 手持烟花
flutter·华为·harmonyos
小镇敲码人13 小时前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
前端不太难14 小时前
HarmonyOS 游戏里,Ability 是如何被重建的
游戏·状态模式·harmonyos
lbb 小魔仙14 小时前
【HarmonyOS实战】React Native 鸿蒙版实战:Calendar 日历组件完全指南
react native·react.js·harmonyos
一只大侠的侠14 小时前
Flutter开源鸿蒙跨平台训练营 Day 3
flutter·开源·harmonyos
盐焗西兰花14 小时前
鸿蒙学习实战之路-Reader Kit自定义字体最佳实践
学习·华为·harmonyos