0
我必须移植到android平台的本地C++项目基于几个静态和动态库,使用基于C++ 11的线程安全单例, ,它们在这些模块之间共享。android平台上的原生Singletons?
这里是我的实际结构的例子:
brCore (Core elements, Manager (Singletons), Logger (Singleton) ect.) STATIC
brGrapics (Generic graphics) uses brCore STATIC
brOpenGLES (GLES renderer) uses brCore, brGraphics DYNAMIC
我的Android应用程序(也DYNAMIC)使用这三个库和负载brOpenGLES动态上启动。 在Linux和Windows平台上的任何工作正常,但在Android上,我得到了与单身烦恼:
04-08 06:47:24.601: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brFileHandler
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): brFileHandler set internal data path: /data/data/com.binrev/files
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.031: I/NativeActivitySimpleExample(1059): Try to initialize Render API
04-08 06:47:24.031: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.051: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brRessourceManager
04-08 06:47:24.051: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.251: I/NativeActivitySimpleExample(1059): Try to init Logger: brCore
04-08 06:47:24.251: I/NativeActivitySimpleExample(1059): Search for existing logger
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brRessourceManager
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.282: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brConfigManager
04-08 06:47:24.601: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): Singleton constructor invoked : brFileHandler
04-08 06:47:24.611: I/NativeActivitySimpleExample(1059): brSingleton getInstance called
正如你所看到的,线程安全的单身人士的构造函数被调用多次,不应该是什么。在Singleton(brFileHandler内部数据路径) 中设置的值在稍后的点丢失。它看起来像图书馆有单独的单身实例,并不能共享图书馆边界之间的内容...
我怎么能解决这个问题? 感谢您的帮助。