您的位置:首页 > 移动开发 > Android开发

关于android Could not lock surface问题

2017-11-21 16:45 495 查看
  公司最近在做一个项目,基于全志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语言是否规范,并调试一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Could not lock surfa
相关文章推荐