HarmonyOS 鸿蒙Next 如何构建跨动态库的单例

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何构建跨动态库的单例

【关键字】

构建跨动态库的单例 / globalThis变量

【问题描述】

在构建跨动态库是如下实现的:

  1. 创建一个静态库 SingletonModel,提供一个单例对象。

  2. 创建一个动态库 DynamicLib,并依赖静态库 SingletonModel,并提供一个方法调用 SingletonModel 的单例对象

  3. entry同时依赖 SingletonModel 和 DynamicLib。

遇到问题如下:

直接调用 SingletonModel 的单例,和通过DynamicLib调用的 SingletonModel 的单例是两个对象问题,那么如何构造一个单例,让其经过动态库后不会生成额外的对象呢?

【解决方案】

使用globalThis变量调整单例的创建模式。

代码参考:

export class CYSingleton {
/* 单例配置 */
public static shared(): CYSingleton {
if (!globalThis.sharedSingleton) {
globalThis.sharedSingleton = new CYSingleton();
}
return globalThis.sharedSingleton
}
}

更多关于HarmonyOS 鸿蒙Next 如何构建跨动态库的单例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next 如何构建跨动态库的单例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中构建跨动态库的单例,通常需要确保在多个动态库(.so文件)加载时,单例对象只被实例化一次。这可以通过使用进程级别的全局变量或特定机制来实现。以下是一个基本的实现思路:

  1. 使用进程全局变量:在鸿蒙系统中,可以利用某些全局变量或进程环境来存储单例对象的指针。这需要确保所有动态库在访问该全局变量时,都使用相同的内存地址。

  2. 互斥锁保护:在创建单例对象时,使用互斥锁(mutex)来保护创建过程,防止多个线程或动态库同时创建对象。

  3. 延迟初始化:采用延迟初始化策略,只有在第一次需要时才创建单例对象,这样可以减少不必要的开销。

  4. 静态局部变量:在C++中,可以利用静态局部变量的特性来实现线程安全的单例模式。但在鸿蒙系统中,由于要求不回答C语言相关内容,此策略需转换为适合鸿蒙的实现方式,如利用上述全局变量和互斥锁。

  5. 确保动态库加载顺序:虽然不推荐依赖加载顺序,但在某些情况下,通过控制动态库的加载顺序,可以简化单例的实现。然而,这不是一个可靠的解决方案。

在HarmonyOS中,实现跨动态库的单例需要综合考虑进程环境、线程安全和资源管理等因素。如果问题依旧没法解决请联系官网客服, 官网地址是:https://www.itying.com/category-93-b0.html

回到顶部