保持对资产管理者的全球参考

时间:2013-06-15 20:19:54

标签: java android java-native-interface

我正在使用Java的资产管理器在我的本地环境中打开一个文件。我希望在init上只打开一次这个文件,然后多次使用文件中定义的函数。为了这个目的,我需要让资产管理者保持全球化。我目前在C ++中有以下内容:

extern "C" {

JNIEXPORT jstring JNICALL
Java_com_torch_torchdemo_TorchDemo_callTorch( JNIEnv* env,
                                            jobject thiz,
                                            jobject assetManager) {
// get native asset manager
if(globalManager == NULL){
jobject globalManager = env->NewGlobalRef(assetManager)
AAssetManager* manager = AAssetManager_fromJava(env, globalManager);
}

然而,这抱怨没有定义globalManager。这是有道理的,因为在init,它不是。我找不到任何关于如何解决这个问题的参考资料。大多数全局参考问题都是关于保持对对象的引用。但是,我需要保留对AAssetManager的引用。

1 个答案:

答案 0 :(得分:1)

  

然而,这抱怨没有定义globalManager。

当然可以。它没有定义。

  

这是有道理的,因为在init,它不是。我找不到任何关于如何解决这个问题的参考资料。

呃,你考虑过定义吗?

显然,您需要的是一个'static jobject globalManager'在全局范围内声明,而不是在您第一次尝试使用它后在块中声明的localvariable。