赞
踩
网上搜索的解决办法:
项目中
jclass o_class;
void initMeth(JNIEnv *env){
o_class = env->FindClass(项目中的java的对象类);
}
上面这个方法初始化了这个引用,除了android5.x之前貌似都不出问题,(6.x也不会出问题)
但是在android5.0上,我的另一个函数里使用
args = env->NewObjectArray(st->Count,o_class , 0); 运行到这行的时候,就会给我报 JNI DETECTED ERROR IN APPLICATION: jclass is an invalid local reference: 0xe340001d (0xdead4321)这个错误,说我的本地引用无效。 这个是与android5.0的GC机制有关系
把所有jclass a = env ->findclass(xxx);
的地方改成 jclass a ;
jclass tmp = env -> findclass(xxx);
a = (jclass)env->NewGlobalRef(tmp); 就搞定了!!!
新版本已经不允许全局使用findclass出来的局部引用了,
会被GC回收掉。所以必须new成全局引用才行。
之前没有把所有的jclass都改过来,所以还是会报错,
结果误以为是强转jclass无效。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。