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.鸿蒙南向开发方向

相关推荐
一字白首4 分钟前
进阶实战:微信小程序路由、交互与生命周期全攻略DAY03
微信小程序·小程序·交互
Swift社区9 分钟前
Flutter 迁移鸿蒙 ArkUI 的真实成本
flutter·华为·harmonyos
互联网散修24 分钟前
零基础鸿蒙应用开发第七节:流程控制之分支语句
harmonyos·流程控制·鸿蒙零基础入门
casual_clover35 分钟前
关于 HarmonyOS 版本的简述
harmonyos·版本信息
GitCode官方38 分钟前
AtomGit 携手开源鸿蒙,推动智能终端操作系统生态繁荣
华为·开源·harmonyos·atomgit
弓.长.1 小时前
ReactNative for OpenHarmony项目鸿蒙化三方库:react-native-image-gallery — 图片画廊组件
react native·react.js·harmonyos
加农炮手Jinx14 小时前
Flutter 组件 ubuntu_service 适配鸿蒙 HarmonyOS 实战:底层系统服务治理,构建鸿蒙 Linux 子系统与守护进程交互架构
flutter·harmonyos·鸿蒙·openharmony·ubuntu_service
里欧跑得慢14 小时前
Flutter 三方库 mobx_codegen — 自动化驱动的高性能响应式状态管理(适配鸿蒙 HarmonyOS Next ohos)
flutter·自动化·harmonyos
UXbot14 小时前
为什么 AI 正在重新定义 UI 设计工具的入门门槛
前端·人工智能·低代码·ui·交互·ai编程·ux
王码码203514 小时前
Flutter 三方库 login_client 的鸿蒙化适配指南 - 打造工业级安全登录、OAuth2 自动化鉴权、鸿蒙级身份守门员
flutter·harmonyos·鸿蒙·openharmony·login_client