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的单例模式下判空逻辑会执行两次是什么回事
827浏览 • 1回复 待解决
HarmonyOS 单例模式打开已有page,page执行什么方法
106浏览 • 1回复 待解决
HarmonyOS 如何实现点击两次返回退出应用
274浏览 • 1回复 待解决
HarmonyOS 连续两次@Link之后UI没更新
143浏览 • 1回复 待解决
HarmonyOS tabs的onContentWillChange事件会触发两次
646浏览 • 1回复 待解决
ArkTS层实例化与单例介绍
3383浏览 • 1回复 待解决
组件被隐藏后 onVisibleAreaChange 事件触发了两次
2200浏览 • 1回复 待解决
HarmonyOS taskpool中使用单例与主线程创建的单例不一致
324浏览 • 1回复 待解决
HarmonyOS canvas组件,设备横屏时onReady会触发两次
103浏览 • 1回复 待解决
HarmonyOS 单例问题
350浏览 • 1回复 待解决
Dev studio需要运行两次才能 生效最新修改的代码
2442浏览 • 1回复 待解决
HarmonyOS 轨迹线样式和预期不符
332浏览 • 1回复 待解决
HarmonyOS 两个HSP之间相关调用,单例不生效
211浏览 • 1回复 待解决
HarmonyOS Text添加动画效果与预期不符
269浏览 • 1回复 待解决
HarmonyOS BlendMode显示效果不符合预期
181浏览 • 1回复 待解决
对于数据库操作,需要捕获两次err,如何优化成捕获一次即可
1706浏览 • 0回复 待解决
PatternLock密码锁组件怎么比较两次输入密码是否一致
922浏览 • 1回复 待解决
HarmonyOS 如何监听返回键事件,实现连按两次返回,提示退出应用
2105浏览 • 1回复 待解决
HarmonyOS 关于单例问题
408浏览 • 1回复 待解决
HarmonyOS 单例对象如何实现
708浏览 • 1回复 待解决
HarmonyOS 单例模式不生效
106浏览 • 1回复 待解决
点击事件冒泡不符合预期
897浏览 • 1回复 待解决
HarmonyOS 关系型数据库是否有办法保证两次批量插入的先后顺序
48浏览 • 1回复 待解决
HarmonyOS taskpool执行@Concurrent修饰的方法在访问主线程中的单例变量时,变量是空的
450浏览 • 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中,放在需要调用的地方,调整代码结构已处理解决.