zoukankan      html  css  js  c++  java
  • 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);

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

  • 相关阅读:
    EL表达式
    使用Cookie保存用户信息
    GUI学习之二——PyQt控件初识
    GUI学习之一——PyQt5初识
    HTML学习总结
    centos7 mysql的安装与配置
    Python之RabbitMQ的使用
    python之模块的导入
    Python之ftp服务器
    GUI学习之〇——PyQt5安装
  • 原文地址:https://www.cnblogs.com/zhongshujunqia/p/4638077.html
Copyright © 2011-2022 走看看