小编Nee*_*raj的帖子

在Android NDK中跨线程共享JavaVM*

我想从一个接收来自另一个可执行文件的回调的cpp文件中调用Java类方法.

为此,我使用直接接收JNI方法调用的.cpp文件中的android :: AndroidRuntime :: getJavaVM()方法检索了一个JavaVM指针.我通过构造函数将此JavaVM指针共享到最终的.cpp文件,我在其中调用所需的Java方法,如下所示:

/* All the required objects(JNIEnv*,jclass,jmethodID,etc) are appropriately declared. */
**JNIEnv* env;
jvm->AttachCurrentThread(&env, NULL);
clazz = env->FindClass("com/skype/ref/NativeCodeCaller");
readFromAudioRecord = env->GetStaticMethodID(clazz, "readFromAudioRecord", "([B)I");
writeToAudioTrack = env->GetStaticMethodID(clazz, "writeToAudioTrack", "([B)I");** 
Run Code Online (Sandbox Code Playgroud)

但是,我遇到运行此代码的 SIGSEGV错误.

根据JNI文档,这似乎是在仲裁环境中获取JNIEnv的适当方式:http://java.sun.com/docs/books/jni/html/other.html#26206

在这方面的任何帮助将不胜感激.

此致,Neeraj

java-native-interface multithreading android-ndk

5
推荐指数
1
解决办法
7030
查看次数