1

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

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

谢谢

4

2 回答 2

1

保护assetManager 对象免受GC 是不够的。您需要一个全局参考:

gAssetManager = env->NewGlobalRef(assetManager);
于 2013-08-18T23:15:33.820 回答
0

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

于 2013-08-19T03:19:37.243 回答