设置为单例模式的类,实例对象创建的顺序是怎么样的? HarmonyOS 鸿蒙Next

设置为单例模式的类,实例对象创建的顺序是怎么样的? HarmonyOS 鸿蒙Next 我们的应用需要登录账号,然后从服务器上获取一些账号信息。我们使用了下面的格式来实现单例类。

const netManager = new HttpServerManager();
export default netManager;

在启动应用的时候出现error异常如下:

  • Pid:7174
  • Uid:20010038
  • Reason:ReferenceError
  • Error name:ReferenceError
  • Error message:accountsManager is not initialized
  • Stacktrace:
    • at updateAccountInfo (entry/src/main/ets/model/NetManager.ets:149:20)
    • at HttpServerManager (entry/src/main/ets/model/NetManager.ets:145:5)----这一行对应:HttpServerManager的构造函数中对updateAccountInfo()的调用
    • at func_main_0 (entry/src/main/ets/model/NetManager.ets:210:20)-----这一行对应:const netManager = new HttpServerManager();

其中accountsManager和NetManager都是单例模式实现的类,NetManager的构造函数中通过updateAccountInfo接口获取当前用户信息,而updateAccountInfo接口中调用了accountsManager的方法。现在应用一启动就闪退,报出Error message:accountsManager is not initialized的异常。也就是说NetManager实例创建的时候accountsManager对象还没有创建,但是我们的另一个单例类的构造函数中也有类似的updateAccountInfo接口,去调用accountsManager的方法,这个类就没有报出类似的not initialized的异常。我想问一下这些类的实例加载/创建顺序是怎么样的?有什么方法可以规避这种因类创建时序导致的异常么?


更多关于设置为单例模式的类,实例对象创建的顺序是怎么样的? HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于设置为单例模式的类,实例对象创建的顺序是怎么样的? HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙系统中,设置为单例模式的类,其实例对象的创建顺序遵循单例模式的基本规则。单例模式确保一个类只有一个实例,并提供一个全局访问点。在鸿蒙系统中,单例对象的创建顺序如下:

  1. 首次访问时创建:当首次通过单例类的访问方法(如getInstance())获取实例时,系统会创建该单例对象。
  2. 延迟初始化:单例对象通常采用延迟初始化的方式,即在第一次需要时才进行创建,而不是在类加载时创建。
  3. 线程安全:鸿蒙系统会确保单例对象的创建过程是线程安全的,通常通过加锁或其他同步机制来避免多线程环境下的重复创建问题。
  4. 唯一性保障:一旦单例对象被创建,后续的所有访问都会返回同一个实例,确保全局唯一性。

在鸿蒙Next中,单例模式的实现机制与上述基本一致,系统会确保单例对象的创建和访问符合预期,并且在整个应用生命周期内保持唯一性。

回到顶部