【关键字】
HSP / 静态变量 / module.json5
【问题描述】
工程中定义了一个工具属性的HSP,包含一个静态变量,静态变量定义如下:
export class AppEnvConstant {
private static _instance: AppEnvConstant
static getInstance() {
if (!AppEnvConstant._instance) {
AppEnvConstant._instance = new AppEnvConstant();
}
return AppEnvConstant._instance;
}
private constructor() {
console.log(`AppEnvConstant constructor ${utils.generateRandomUUID(false)}`);
}
}
entry、业务模块(也是HSP)都引用了上述HSP,除了getInstance() 方法外再无其他地方主动调用构造方法。观察应用启动时,发现构造函数调用了两次。在HSP中定义全局变量需要注意哪些?如何避免多次构造实例?
工程里业务模块 HSP1代码中使用工具HSP的静态类,会导致实例化两次; 同样的业务代码拷贝到另一个业务模块HSP2中,就不会实例化两次。 HSP1和HSP2的 build-profile 文件没有区别,module.json5 除了name以外也没有任何区别,oh-package.json导入方式也一致。
【解决方案】
1、可能是由于DevEco Studio打包时未将HSP识别为HSP所导致。
排查方式:
是否工程级依赖配置中配置了HSP,请让entry和业务模块分别依赖HSP。
相对路径的方式依赖了HSP里的代码,这种场景也会导致不会被识别成HSP。
2、两个module中oh-package.json5中 modules/commonutils定义的名字不同,您可以排查一下是否是这个问题导致的。
例如:
modules/trade中是小写
"commonutils": "file:../../libraries/commonutils",
modules/platform中是大写
"commonUtils": "file:../../libraries/commonutils"