我正在用C ++编写Android代码。主代码是用Java编写的,但我想从JNI调用启动另一个调用C ++的资产并访问资产。但是,当我从AAssetsManager
传递getAssets()
时,它仅在JNI函数调用范围内有效。当其他线程尝试使用时,我得到一个无效的指针。我还确保通过将对象AAssetsManager
写入静态变量来对其进行垃圾回收。您对我如何使其有效有任何建议吗?
在其他作品中,我想访问AAssetManager
并缓存其他对象。
由于
答案 0 :(得分:1)
仅保护AssetManager对象不受GC限制。您需要一个全局参考:
gAssetManager = env->NewGlobalRef(assetManager);
答案 1 :(得分:0)
如果您想通过本机线程访问Java VM,则必须调用AttachCurrentThread()
将本机线程附加到VM。你做过这个吗?如果没有,您可以参考Oracle的JNI docs。