先介绍一下背景吧。
JNI调用C语言的时候, 碰到一个比较蛋疼的问题, 就是在回调函数中调用DetachCurrentThread这个, 会异常退出。
然后就是各种加打印, 终于定位到是调用DetachCurrentThread过程中由SetByteArrayRegion这个函数引起ArrayIndexoutofBoundsException。
又是各种试, 终于知道为啥会退出了, 不过不知道更深层次的原因。
在回调函数中, 由于会经常调用(1秒会有十几次调用), 而且会申请一块大内存(3M), 我为了节省资源, 让开始的时候, 一次性申请, 然后每次都SetByteArrayRegion这个函数去存放数据。 等到DetachCurrentThread这个时候, 就杯具了。
解决方案很简单, 就是每次调用回调的时候, 都用NewByteArray能申请一块空间。
如果谁有更好的解决方案,请告诉我, 谢谢!