处理JNI ERROR (app bug): accessed stale local reference 0xbc00021报错

最近接sdk出现一个jni的报错,并且根据机型并不是必现类型的bug,查了好多资料,并未解决问题。

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

网上流传的说法比较可信的是,再android的4.0版本之后,静态变量会有可能被释放,这个是可能的,但出现的情况非常少,并不像自己的真机包出现问题那么频繁。

关于android的java回收,研究下来,应该是当系统资源非常少的时候,会选择性地释放一些资源,用来减少压力,而Activty应该下属的对象有可能被回收,在应用恢复的时候,再通过Application重建对象,以前的版本静态变量是不可能被回收,而4.0以后的版本,则在极端的情况下,会回收静态变量。

然而实际测试下来,就算数据释放,造成应用无法恢复,大多android系统也会自行切换重启应用,以避免错误,所以由静态变量引发的异常应该少之又少。

最后通过跟踪和日志,发现在jni里(cocos2dx目前使用4.0版本),当一个string参数被传入nil值,则该对象为一个野指针,因此在某些情况下并不会造成崩溃,所以比较难发现这类问题。

因此,解决该问题,还是先检查传入参数是否正常,类型是否匹配,是否存在空值,作为第一优先,jni内部,没有对此做保护判断,因此就会产生一些难以捉摸的bug。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值