在主线程中,使用env->FindClass执行正常,可以正常调用。但是在多线程的情况下,其他线程去使用自己的env下的FindClass会失败。
问题是其他线程的env找不到相关类。
解决方案:
添加链接描述
//在工作线程内
JNIEnv *env;
jclass cls;
jmethodID mid;
//Attach主线程
if(AndroidHelper::getInstance()->GetVM()->AttachCurrentThread(&env, NULL) != JNI_OK)
{
return;
}
//该对象是从Java层传过来的 后面调用的格式 :对象所在包名+对象名 + 方法名+签名
cls = env->GetObjectClass(保存的对象);
if(cls == NULL)
{
XLOGE("FindClass() Error.....");
return;
}
//再获得类中的方法
mid = env->GetStaticMethodID(cls, "方法名", "签名");
env->CallStaticVoidMethod(cls, mid , 参数);
必须设置为全局:
env->NewGlobalRef(jobject);
工作结束后记得 DetachCurrentThread()