Android:如何从C ++中的另一个线程读取资产

时间:2013-08-18 22:42:45

标签: android multithreading android-ndk java-native-interface assets

我正在用C ++编写Android代码。主代码是用Java编写的,但我想从JNI调用启动另一个调用C ++的资产并访问资产。但是,当我从AAssetsManager传递getAssets()时,它仅在JNI函数调用范围内有效。当其他线程尝试使用时,我得到一个无效的指针。我还确保通过将对象AAssetsManager写入静态变量来对其进行垃圾回收。您对我如何使其有效有任何建议吗?

在其他作品中,我想访问AAssetManager并缓存其他对象。

由于

2 个答案:

答案 0 :(得分:1)

仅保护AssetManager对象不受GC限制。您需要一个全局参考:

gAssetManager = env->NewGlobalRef(assetManager);

答案 1 :(得分:0)

如果您想通过本机线程访问Java VM,则必须调用AttachCurrentThread()将本机线程附加到VM。你做过这个吗?如果没有,您可以参考Oracle的JNI docs