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

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

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

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

谢谢

最佳答案

仅保护 assetManager 对象不受 GC 影响是不够的。您需要一个全局引用:

gAssetManager = env->NewGlobalRef(assetManager);

关于Android:如何从 C++ 中的另一个线程读取 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304357/

相关文章:

C递归预处理器定义

android - 对话框中的 map View

Android小部件获取触摸位置

c - 在 C 中在 main 外部定义一个数组,并在 main 内部分配其大小

c++ - 无法解决构建 Android NDK 库时出现的 "undefined reference to"错误

android - NDK 如何获取所有正在运行的进程的列表?

android - arrayadapter 更改字体时出错

android - 如何使用 FFMpeg 从多个图像序列创建视频?

c# - 为什么在 UI 线程上锁定会触发 OnPaint 事件?

java - 理解 Goetz 关于 HttpSession 的线程安全的文章