问题描述
我必须在项目中使用jni库。 我应该在Service中还是在单独的线程中加载该库,还是将Service作为单独的进程使用。 当我尝试在线程中启动它,然后清理资源,再次重新加载和使用它时,它崩溃了。 可能是内存泄漏。 加载和卸载库的最佳方法是什么? 我在某个地方看到无法卸载这些库。 只能由GC完成。
1楼
在Android中,不应卸载JNI共享库。 实际上,Java类也无法卸载。 这不是内存泄漏,与垃圾回收器没有任何关系。
除非您有一些非常特殊的设置,否则建议将System.load()
放入使用此本机库的一个或多个类的静态构造函数中。
无论您的服务是在进程内运行还是在单独的进程中运行,框架都会为您处理。
如果您在库的JNI_OnLoad()
中做了一些敏感的工作, JNI_OnLoad()
可能要特别小心,不要JNI_OnLoad()
执行两次。