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

  }
}
相关推荐
爱写代码的阿木20 分钟前
基于鸿蒙OS开发附近社交游戏平台(五)-构建配置与签名部署
游戏·华为·harmonyos
爱写代码的阿森29 分钟前
鸿蒙三方库 | harmony-utils之CharUtil字符类型判断详解
华为·harmonyos·鸿蒙·huawei
Alter123043 分钟前
从堆算力到算存网协同,华为给出了Agent时代的新解法
人工智能·华为
木木子221 小时前
# 计数器应用 — 从零开始的HarmonyOS ArkUI开发实战
华为·harmonyos
爱写代码的森1 小时前
鸿蒙三方库 | harmony-utils之PasteboardUtil剪贴板数据读写详解
服务器·华为·harmonyos·鸿蒙·huawei
SageMik2 小时前
通过 GitHub Actions 将 鸿蒙 HAR 包 发布到 OpenHarmony 三方库中心仓
harmonyos
爱写代码的阿森2 小时前
鸿蒙三方库 | harmony-utils之StrUtil字符串空值判断详解
华为·harmonyos·鸿蒙·huawei
jin1233223 小时前
HarmonyOS ArkTS API 24实现声明式 UI 框架与 @Builder 组件复用模式构建三标签页智能账单应用
ui·华为·harmonyos
DONSEE广东东信智能读卡器3 小时前
东信智能身份证阅读器、读卡器使用ArkTS 语言开发基于鸿蒙HarmonyOS 6.1版本的读取测试软件
harmonyos·鸿蒙·身份证阅读器·社保卡读卡器·东信est-100
ov二号3 小时前
鸿蒙原生ArkTS布局方式之Image+renderMode图片渲染模式深度解析
华为·harmonyos