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


    在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);

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

  • 相关阅读:
    转载 如何去掉超链接文字下的下划线
    Fedora 15安装 VirtualBox 4.1
    庆祝开通!
    Delphi直接读写XML修改版
    Perforce的资料一点也没查到
    AxWebBrowser的Navigate2方法写参数的偷懒方法
    腾讯2012实习生面试
    如何让div在IE6下自适应
    PhpStorm修改字体
    监听url
  • 原文地址:https://www.cnblogs.com/zhongshujunqia/p/4638077.html
Copyright © 2020-2023  润新知