HarmonyOS 单例执行了两次构造方法,与预期不符
子模块中的FZServiceManager.ets:
export class FZServiceManager {
private static _instance: FZServiceManager
/* 单例 */
static get sharedInstance(): FZServiceManager {
if (!FZServiceManager._instance) {
FZServiceManager._instance = new FZServiceManager()
}
return FZServiceManager._instance
}
constructor() {
console.log("======initServiceInstance=====");
this.initInfoMap()
this.initServiceInstance()
}
private initInfoMap() {
// ...
}
private async initServiceInstance() {
// ...
}
}
export const serviceManager = FZServiceManager.sharedInstance
我分别在AblilityStage.ets,与Index.ets中 import { FZServiceManager } from 'module'
在应用程序启动时上述构造方法中的“====== initServiceInstance =====”输出了两次,表明执行了两次构造方法,这与单线程的预期不符合
通过断点发现是export const serviceManager = FZServiceManager.sharedInstance这段执行了两次,这似乎是FZServiceManager被引入了两次
请解答:为什么export const serviceManager = FZServiceManager.sharedInstance会执行两次? 我有什么方式可以安全的创建单例?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
ArkTS的单例模式下判空逻辑会执行两次是什么回事
899浏览 • 1回复 待解决
HarmonyOS 单例模式打开已有page,page执行什么方法
239浏览 • 1回复 待解决
HarmonyOS 如何实现点击两次返回退出应用
513浏览 • 1回复 待解决
HarmonyOS 连续两次@Link之后UI没更新
282浏览 • 1回复 待解决
HarmonyOS tabs的onContentWillChange事件会触发两次
920浏览 • 1回复 待解决
ArkTS层实例化与单例介绍
3625浏览 • 1回复 待解决
HarmonyOS taskpool中使用单例与主线程创建的单例不一致
498浏览 • 1回复 待解决
HarmonyOS 轨迹线样式和预期不符
423浏览 • 1回复 待解决
组件被隐藏后 onVisibleAreaChange 事件触发了两次
2299浏览 • 1回复 待解决
HarmonyOS BlendMode显示效果不符合预期
408浏览 • 1回复 待解决
HarmonyOS Text添加动画效果与预期不符
421浏览 • 1回复 待解决
点击事件冒泡不符合预期
1054浏览 • 1回复 待解决
HarmonyOS canvas组件,设备横屏时onReady会触发两次
208浏览 • 1回复 待解决
HarmonyOS 单例问题
638浏览 • 1回复 待解决
HarmonyOS 两个HSP之间相关调用,单例不生效
315浏览 • 1回复 待解决
Dev studio需要运行两次才能 生效最新修改的代码
2517浏览 • 1回复 待解决
HarmonyOS 关于单例问题
712浏览 • 1回复 待解决
PatternLock密码锁组件怎么比较两次输入密码是否一致
1106浏览 • 1回复 待解决
对于数据库操作,需要捕获两次err,如何优化成捕获一次即可
1809浏览 • 0回复 待解决
HarmonyOS 如何监听返回键事件,实现连按两次返回,提示退出应用
2672浏览 • 1回复 待解决
HarmonyOS 单例对象如何实现
1005浏览 • 1回复 待解决
HarmonyOS 单例模式不生效
371浏览 • 1回复 待解决
HarmonyOS TextTimer超过60s显示不符合预期
246浏览 • 1回复 待解决
RichText组件font标签size属性不符合预期
2274浏览 • 1回复 待解决
HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。比如多个HAP引用同一个HAR,其实上是引用了多份HAR,会有多个互不影响的HAR中的单例。
HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。比如多个HAP引用HSP,引用的就是同一个HSP。
所以要想创建一个全局的单例,建议写在HSP中,而不是HAR中。
参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/application-package-overview-V5
另外运行时找不到模块,建议初始化调用不要放在constructor中,放在需要调用的地方,调整代码结构已处理解决.