HarmonyOS 应用开发之@Concurrent装饰器:@Sendable装饰器:声明并校验Sendable类

简介

在使用 TaskPool 时,执行的并发函数若需要传输类对象且使用该类的内部方法,该类需要使用此装饰器修饰,否则无法使用此对象内的方法。SendableClass有以下两种行为:

  • 支持SendableClass序列化。对象分配在各自的虚拟机内存空间,不存在竞争访问,不同线程可以同时读写。

  • 支持SendableClass在跨线程传递时的引用传递(暂不支持)。

说明:

从API version 11开始,该装饰器支持在ArkTS卡片中使用。

当前该装饰器仅支持克隆拷贝,使用时需搭配 setCloneList,否则会抛异常。

基本概念

SendableClass:被@Sendable装饰器修饰的类为SendableClass。

装饰器说明

@Sendable类装饰器 说明
装饰器参数 无。
使用场景限制 仅支持在Stage模型的工程中使用。仅支持在.ets文件中使用。
装饰的类继承关系限制 SendableClass只能继承SendableClass,普通Class可以继承SendableClass。
装饰的对象内的属性类型限制 支持string、number、boolean、SendableClass。禁止使用闭包变量。不支持#定义私有属性,需用private。不支持计算属性。
装饰的对象内的属性的其他限制 成员属性必须显式初始化。成员属性不能跟问号和感叹号。
装饰的对象内的方法参数限制 允许使用local变量、入参和通过import引入的变量。禁止使用闭包变量。
Sendable Class的限制 不支持增加属性、不支持删除属性、允许修改属性,修改前后属性的类型必须一致、不支持修改方法。必须声明或定义在文件顶层,不能定义在函数内。
其他限制 导出SendableClass的文件,不能导出非SendableClass属性。只能标记class,不支持interface和enum。
适用场景 在TaskPool使用类方法或传输对象的数据量较大的场景中推荐使用该装饰器。

装饰器使用示例

ts 复制代码
@Sendable
class TaskpoolTestClass {
  desc: string = "sendable: this is TaskpoolTestClass ";
  taskNum: number = 5;
  printName() {
    console.info("sendable: TaskpoolTestClass desc is: " + this.desc);
  }
  get getTaskNum(): number {
    return this.taskNum;
  }
}

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ......

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ......

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ......

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题

2.性能优化方向

3.架构方向

4.鸿蒙开发系统底层方向

5.鸿蒙音视频开发方向

6.鸿蒙车载开发方向

7.鸿蒙南向开发方向

相关推荐
AI备忘录1 小时前
(二十五)华为华三锐捷迈普思科 ERPS 环网保护配置命令(G.8032 五厂商对照)
运维·服务器·网络·网络协议·华为
OH_TPC3 小时前
【鸿蒙优选三方库】@ohos/coap:让鸿蒙设备说上 IoT 的母语
物联网·华为·harmonyos·鸿蒙
FungLeo4 小时前
成为全栈·Flutter App 篇·内置 WebView:网页历史、App 返回与外链安全
flutter·网络安全·移动开发·webview·路由管理·成为全栈
程序猿追4 小时前
渐变中间那一格怎么算?用 colormath 做个鸿蒙调色器
华为·harmonyos
程序猿追4 小时前
在 HarmonyOS 6 上做了张 3D 翻转卡片,正面背面来回翻
3d·华为·harmonyos
白山编程大哥5 小时前
把 AO 接回来:黑线和白底之间到底差了多少
交互
传奇开心果编程5 小时前
【Compose Multiplatform跨端声明式UI实用技术】第4课:Composable 函数与声明式 UI 思维
移动开发·编程语言理论·开发范式·编程框架·函数式思维·声明式ui·声明式ui思维
小π军5 小时前
安卓、iOS、鸿蒙三端的理解
android·ios·harmonyos
m0_738185825 小时前
Flutter 鸿蒙化实战:volume_controller 适配 OpenHarmony,系统音量控制
flutter·华为·harmonyos·鸿蒙
用户117910488335 小时前
每个会话一个子进程:多会话真并行的架构取舍
开源·harmonyos