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

  }
}
相关推荐
全球通史3 分钟前
HarmonyOS机械臂蓝牙控制应用开发完整教程
华为·harmonyos
爱吃大芒果10 分钟前
Flutter 表单开发实战:表单验证、输入格式化与提交处理
开发语言·javascript·flutter·华为·harmonyos
狮子也疯狂13 分钟前
跨平台适配:Flutter在鸿蒙生态中的应用
flutter·华为·harmonyos
不爱吃糖的程序媛1 小时前
Flutter-OH OAuth 鸿蒙平台适配详细技术文档
javascript·flutter·harmonyos
讯方洋哥1 小时前
判断、循环
harmonyos
未来之窗软件服务1 小时前
幽冥大陆(五十四)V10酒店门锁SDK 鸿蒙(HarmonyOS)——东方仙盟筑基期
华为·harmonyos·仙盟创梦ide·东方仙盟·东方仙盟sdk
柒儿吖2 小时前
命令行esh在开源鸿蒙PC平台的工程实践
开源·harmonyos·命令行
Lois_Luo2 小时前
基于鸿蒙(HarmonyOS)系统的 GPS 数据采集 APP 设计与实现方案
华为·harmonyos·gps采集
子榆.2 小时前
Flutter 与开源鸿蒙(OpenHarmony)离线能力与数据同步架构设计:打造高可用跨端应用
flutter·开源·harmonyos
BullSmall3 小时前
华为 C2 (X86 + 欧拉 + 高斯) 技术栈详解
华为