我正在将许多.so库加载到Android应用程序中。当我进行JNI调用时,library.so中的函数会运行无限循环,因此它永远不会返回调用函数。
我应该从Java线程进行JNI调用还是应该从库中的pthreads加载函数?哪个更好?
第二个问题:当用户退出MainActivity时,如何确定库已卸载?
谢谢。
最佳答案
对于第一个问题,基本上是亚历克斯所说的。如果选择Java或pthreads,则应该不会有太大的区别。
对于第二个问题,您应该在Java代码中存储一个指向创建的库的指针。最简单的方法是让您的Jni调用将此指针作为jlong返回。但是,由于jni函数永远不会返回,因此您必须直接在本机代码中设置值。
在此处签出NativeHandle类的实现
http://thebreakfastpost.com/2012/01/26/wrapping-a-c-library-with-jni-part-2/
然后在主要活动退出之前(我假设在onDestroy()方法中)调用
jni函数停止运行库