HarmonyOS 单例类被反复初始化的问题

单例类单例失效,单例类被反复实例化。

export class MessageDataBase {
  private uuid: string = ""

  private constructor() {
    this.uuid = util.generateRandomUUID(true);
    Logger.info("DataBase初始化:" + this.uuid)
  }

  private static INSTANCE: MessageDataBase | null = null
  public static getInstance(): MessageDataBase {
    if (!MessageDataBase.INSTANCE) {
      MessageDataBase.INSTANCE = new MessageDataBase();
    }
    return MessageDataBase.INSTANCE as MessageDataBase
  }
}

目前在使用中发现这个类会被反复实例化,难道和跨模块调用有关?目前有3个模块 ABC,模块类型都是HSP。

诉求:

1.确认单例模式失效的原因。

2.单例模式失效的规避方法。

3.ArkTS里面的类在export到不同的module里面后,class本质被改变了吗,不再是同一个类了吗?

HarmonyOS
2024-12-23 14:50:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

包依赖场景如下:A (hap) -> B(hsp) ->D (hsp) -> C(hsp) -> D(hsp),因A\B\C\D都在1个项目下同时编译,B/C依赖的版本一致。问题发生涉及C++调用ETS的场景,hilog看到进程-线程号均一致。

问题原因是C++回调ETS创建新虚拟机导致,可参考以下资料保证线程安全的回调原ets虚拟机:

使用Node-API接口进行异步任务开发:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-asynchronous-task-V5

使用Node-API接口进行线程安全开发:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-thread-safety-V5

进程模型:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/process-model-stage-V5

线程模型:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/thread-model-stage-V5

分享
微博
QQ
微信
回复
2024-12-23 17:48:41
相关问题
HarmonyOS Component初始化问题
1797浏览 • 1回复 待解决
HarmonyOS泛型属性如何初始化
1630浏览 • 1回复 待解决
HarmonyOS 导出使用时报未初始化
1242浏览 • 1回复 待解决
HarmonyOS XComponent初始化
1458浏览 • 1回复 待解决
关于初始化EGL环境相关问题
3134浏览 • 1回复 待解决
HarmonyOS 自定义弹窗初始化问题
1023浏览 • 1回复 待解决
HarmonyOS 问题
1469浏览 • 1回复 待解决
HarmonyOS 关于问题
1645浏览 • 1回复 待解决
HarmonyOS struct初始化方法
1277浏览 • 1回复 待解决
HarmonyOS 组件初始化参数
997浏览 • 1回复 待解决
HarmonyOS 模式拿不到对象
1614浏览 • 1回复 待解决
HarmonyOS 怎么实现线程安全
1374浏览 • 1回复 待解决
初始化安全相机方法
1520浏览 • 1回复 待解决
HarmonyOS export struct初始化参数
1328浏览 • 1回复 待解决
HarmonyOS 应用RDB初始化示例
1515浏览 • 1回复 待解决
HarmonyOS 推送服务初始化失败
1260浏览 • 1回复 待解决
HarmonyOS 初始化EGL环境失败
1193浏览 • 1回复 待解决
HarmonyOS TaskPool子线程问题
1407浏览 • 1回复 待解决
ArkTS层实例介绍
5127浏览 • 1回复 待解决
HarmonyOS 怎么监听Web初始化完成?
1228浏览 • 1回复 待解决
怎么进行全局初始化操作?
585浏览 • 0回复 待解决