Android之jni解决JNIEnv跨线程问题
生活随笔
收集整理的這篇文章主要介紹了
Android之jni解决JNIEnv跨线程问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、問題
JNIEnv是一個線程相關的變量 JNIEnv 對于每個 thread 而言是唯一的 JNIEnv *env指針不可以為多個線程共用
2、解決辦法
java虛擬機的JavaVM指針是整個jvm公用的,我們可以用JavaVM來得到當前線程的JNIEnv指針,可以使用javaAttachThread保證取得當前線程的Jni環境變量 下面的寫法是cpp文件 JavaVM *g_jvm = NULL; jobject g_obj = NULL; //由java調用來建立JNI環境 JNIEXPORT void Java_****_setJNIEnv( JNIEnv* env, jobject obj){//保存全局JVM以便在子線程中使用env->GetJavaVM(&g_jvm);//不能直接賦值(g_obj = obj)g_obj = env->NewGlobalRef(obj);} //線程里面JNIEnv *env;jclass cls;jmethodID mid;//Attach主線程if(g_jvm->AttachCurrentThread(&env, NULL) != JNI_OK){return NULL;}//找到對應的類cls = env->GetObjectClass(g_obj);if(cls == NULL){go
總結
以上是生活随笔為你收集整理的Android之jni解决JNIEnv跨线程问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之jni编译出现no ma
- 下一篇: Android之运行Java.lang.