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初始化问题
998浏览 • 1回复 待解决
HarmonyOS泛型属性如何初始化
918浏览 • 1回复 待解决
HarmonyOS 导出使用时报未初始化
421浏览 • 1回复 待解决
HarmonyOS XComponent初始化
622浏览 • 1回复 待解决
HarmonyOS 自定义弹窗初始化问题
326浏览 • 1回复 待解决
HarmonyOS 问题
656浏览 • 1回复 待解决
关于初始化EGL环境相关问题
1509浏览 • 1回复 待解决
HarmonyOS 组件初始化参数
303浏览 • 1回复 待解决
HarmonyOS struct初始化方法
541浏览 • 1回复 待解决
HarmonyOS 怎么实现线程安全
605浏览 • 1回复 待解决
HarmonyOS 模式拿不到对象
891浏览 • 1回复 待解决
HarmonyOS export struct初始化参数
587浏览 • 1回复 待解决
HarmonyOS 关于问题
748浏览 • 1回复 待解决
HarmonyOS 初始化EGL环境失败
453浏览 • 1回复 待解决
初始化安全相机方法
890浏览 • 1回复 待解决
HarmonyOS 应用RDB初始化示例
852浏览 • 1回复 待解决
HarmonyOS 推送服务初始化失败
313浏览 • 1回复 待解决
没法调试“已初始化”分支
612浏览 • 1回复 待解决
ArkTS层实例介绍
3675浏览 • 1回复 待解决
HarmonyOS 怎么监听Web初始化完成?
526浏览 • 1回复 待解决