关于android Could not lock surface问题

  公司最近在做一个项目,基于全志A20系统,属于android低端机

  在工业应用当中,经常会使用到io流输出输入。读取开发板上面高低电频

  在这里会使用到jni

  大家知道,c语言跟java体系不同,jni调用的c语言出错,java层是无法捕获出错信息,也无法消除错误

  假设是纯c语言,直接调用exit(0)函数,然后自启,整个过程不会超过0.1秒,但在android中,c语言出错,是不会抛出错误的。

  所以网上很多碰到相同问题,如软件跑一段时间突然提示Could not lock surface,然后软件处于假死状态,碰一下就死。但我没见到过真正解决的方案

  于是我花了很久时间,通过绝大耐心的调试,找到了我代码内部造成Could not lock surface并且不报任何其他错误的bug。分享给大家,希望对您有帮助

  

  在我的工程中,我需要调用c语言中ioctl这个函数。这个函数的含义我就不在这说了,网上一大把。当我高频率延迟约200毫秒使用该函数,直至某次,

  使用该函数之前需要使用的open函数返回值超过1024;该函数会返回错误值-1,logcat马上输出Could not lock surface;程序立即假死。

  当然,并非是c函数使用频率导致的问题,而是我的代码架构问题,我在另一个地方写了一个网络connect函数,并且在connect失败时未关闭描述符也就是也就是没有调用close方法。导致描述符被占用而自增

 ,自增到1024以上,程序即崩溃。

  正确的做法是统一管理描述符,将描述符写成静态变量,凡是使用了描述符的地方,先行判断是否大于0,大于则直接close掉。

  修改软件过后,再未出现该问题。 

  表达不清,忘请见谅,总之,出现could not lock surface问题,并且未报java错误,最佳的方法,请检查jni里面c语言是否规范,并调试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值