首页 > 移动平台 > 详细

JNI ERROR (app bug): accessed stale local reference 0xbc00021

时间:2015-07-11 10:27:58      阅读:262      评论:0      收藏:0      [点我收藏+]

在android ndk编程时,要使用到.so文件,so文件使用c语言编写的。当我在c文件中调用java类时,第一次调用时没问题的,但第二次调用的时候就失败了。上网搜了很多资料,大概原因是在jni中,使用指针指向某一个java对象的时候,由于android的垃圾回收机制(Garbage Collector),如果java对象被回收的话,那么指针指向的对象就会为空或者不存在,从而提示JNI ERROR:accessed stale(陈旧的,落后的) local reference 大概的意思就是变量已经不存在了。所以要解决这个问题,就要求把java对象定义成静态的,这样可以避免被被回收(在Android4.0以后,静态变量也会被回收,但概率较小),从而导致错误的产生。下面是我的实例:

jobject mTestProvider;

mTestProvider = (*jniEnv)->NewObject(jniEnv, obj_class, construction_id);

修改后:

static jobject mTestProvider;

jobject obj = jobject obj = (*jniEnv) ->NewObject(jniEnv,obj_class,construction_id);

mTestProvider = (jobject) (*jniEnv) ->NewGlobalRef(jniEnv,obj);

以上仅是个人的经验,希望能解决你的问题!

JNI ERROR (app bug): accessed stale local reference 0xbc00021

原文:http://www.cnblogs.com/zhongshujunqia/p/4638077.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!