鸿蒙:使用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%')

  }
}
相关推荐
●VON5 小时前
重生之我在大学自学鸿蒙开发第九天-《分布式流转》
学习·华为·云原生·harmonyos·鸿蒙
Bert丶seven12 小时前
鸿蒙Harmony实战开发教学(No.7)-Image组件基础到进阶篇
华为·harmonyos·arkts·鸿蒙·鸿蒙系统·arkui·开发教学
Bert丶seven18 小时前
鸿蒙Harmony实战开发教学(No.6)-Search组件基础到进阶篇
华为·harmonyos·arkts·鸿蒙·鸿蒙系统·arkui·开发教学
万少18 小时前
HarmonyOS6 应用升级经验分享
harmonyos
蓝冰印18 小时前
HarmonyOS Next 快速参考手册
linux·ubuntu·harmonyos
流影ng18 小时前
【HarmonyOS】并发线程间的通信
typescript·harmonyos
君逸臣劳21 小时前
【Harmony Next】手把手撸一个支持高度自定义的Toast
harmonyos
安卓开发者1 天前
鸿蒙NEXT传感器开发概述:开启智能感知新时代
华为·harmonyos
nju_spy1 天前
华为AI岗 -- 笔试(一)
人工智能·深度学习·机器学习·华为·笔试·dbscan·掩码多头自注意力