安卓android jni创建线程后无法findclass
参考:
http://blog.csdn.net/qiuchangyong/article/details/27222701
http://blog.csdn.net/lirunfa/article/details/8030094
C++里首先定义全局变量:
JavaVM* gs_jvm = nullptr;
然后在第一个java调用c++的函数里调用
env->GetJavaVM(&gs_jvm); //来获取JavaVM指针.获取了这个指针后,将该JavaVM保存起来。 static jclass cls = nullptr; if( nullptr == cls ){ cls = env->FindClass( "com/abcd/efgg/sdfa"); cls = (jclass)env->NewGlobalRef(cls);//永久保存cls }
最后随便任何一个线程里:
JNIEnv *env; int status = gs_jvm->GetEnv( (void**)&env, JNI_VERSION_1_4 ); if(status < 0) { //LOGD("callback_handler:failed to get JNI environment assuming native thread"); status = gs_jvm->AttachCurrentThread(&env, NULL); if(status < 0) { // LOGE("callback_handler: failed to attach current thread"); return; } } 然后就在这个线程里用这个env和上面永久保存的全局cls,做什么都可以了
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。