鸿蒙编程江湖:ArkTS中Sendable数据在并发实例间的传递

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

Sendable 是 ArkTS 中用于实现数据在并发实例间传递的一种机制。Sendable 数据可以安全地在多线程之间共享,避免了数据竞争问题,并提高了并发编程的效率。

Sendable 协议的介绍

Sendable 协议定义了 ArkTS 的可共享对象体系及其规格约束。符合 Sendable 协议的数据(以下简称 Sendable 数据)可以在 ArkTS 并发实例间传递。
Sendable 数据的特点

  • 可序列化:Sendable 数据可以被序列化,以便在并发实例间传递。
  • 线程安全:Sendable 数据在并发实例间传递时,保证了数据的线程安全。
  • 共享或拷贝:Sendable 数据在并发实例间传递时,可以选择引用传递或拷贝传递。

Sendable 数据在多线程中的引用与拷贝传递

引用传递

  • Sendable 数据在并发实例间传递时,其引用会被复制。
  • 并发实例可以修改 Sendable 数据的内容,但这些修改不会影响其他并发实例。
    拷贝传递
  • Sendable 数据在并发实例间传递时,其内容会被复制。
  • 并发实例可以修改 Sendable 数据的内容,但这些修改不会影响其他并发实例的原始数据。

引用传递与拷贝传递的选择

选择引用传递还是拷贝传递取决于您的具体需求:

  • 引用传递:适用于数据量较小,且并发实例需要共享数据的情况。
  • 拷贝传递:适用于数据量较大,且并发实例需要独立操作数据的情况。

Sendable 数据的创建与传输的代码实现

以下是一个简单的示例,演示如何创建 Sendable 数据并将其传递到 TaskPool 中:

typescript 复制代码
import { taskpool } from '@kit.ArkTS';
@Sendableclass MyData {
  public value: number = 0;
  constructor(value: number) {
    this.value = value;
  }
}
async function processData(data: MyData) {
  data.value += 1;
  console.log(data.value);
}
async function main() {
  const data = new MyData(10);
  const task = new taskpool.Task(processData, data);
  await taskpool.execute(task);
}
@Entry@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Column() {
      Text(this.message)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(async () => {
          await main();
        })
        .width('100%');
    }
    .height('100%');
  }
}

这段代码定义了一个名为 Index 的组件,并在组件中显示了一条文本消息 "Hello World"。点击按钮会执行 main 函数,该函数创建一个 Sendable 对象并将其传递到 TaskPool 中。任务完成后,会在控制台输出修改后的数据值。

Sendable 数据传递机制与普通数据传递机制对比

特性 Sendable 数据传递 普通数据传递
可序列化 支持 支持
线程安全 支持 不支持
共享或拷贝 支持 支持
传递效率

总结

通过以上介绍,您可以了解到鸿蒙系统中 Sendable 数据的传递机制。Sendable 数据可以安全地在并发实例间传递,避免了数据竞争问题,并提高了并发编程的效率。希望本文能够帮助您掌握鸿蒙系统中的并发编程技术,并开发出更优秀的鸿蒙应用。

相关推荐
bestadc18 小时前
入门版 鸿蒙 组件导航 (Navigation)
harmonyos
HarmonyOS_SDK20 小时前
几行代码配置高频按钮,保障用户体验一致
harmonyos
邹荣乐1 天前
鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南
harmonyos
别说我什么都不会1 天前
【仓颉三方库】图像处理库 —— gifdrawable4cj
harmonyos
彭不懂赶紧问1 天前
鸿蒙NEXT开发浅进阶到精通04:类似支付宝横向导航栏与list组件联动随航
前端·harmonyos
HarmonyOS小助手1 天前
如何用DevEco Studio的ArkUI Inspector轻松搞定鸿蒙应用UI布局
harmonyos·鸿蒙·deveco studio·harmonyos next·arkui inspector
hellojackjiang20111 天前
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
网络·harmonyos·即时通讯·im开发
特立独行的猫a1 天前
HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(一、项目介绍及实现效果)
华为·harmonyos·元服务·上架
云和数据.ChenGuang2 天前
鸿蒙版电影app设计开发
华为·harmonyos·鸿蒙·鸿蒙系统
Bruce_Liuxiaowei2 天前
HarmonyOS Next~鸿蒙系统UI创新实践:原生精致理念下的设计革命
ui·华为·harmonyos