当前位置: 代码迷 >> Android >> 我们应该在哪里在android中加载库.so以便在卸载时不会出现任何内存泄漏?
  详细解决方案

我们应该在哪里在android中加载库.so以便在卸载时不会出现任何内存泄漏?

热度:71   发布时间:2023-08-04 11:03:09.0

我必须在项目中使用jni库。 我应该在Service中还是在单独的线程中加载该库,还是将Service作为单独的进程使用。 当我尝试在线程中启动它,然后清理资源,再次重新加载和使用它时,它崩溃了。 可能是内存泄漏。 加载和卸载库的最佳方法是什么? 我在某个地方看到无法卸载这些库。 只能由GC完成。

在Android中,不应卸载JNI共享库。 实际上,Java类也无法卸载。 这不是内存泄漏,与垃圾回收器没有任何关系。

除非您有一些非常特殊的设置,否则建议将System.load()放入使用此本机库的一个或多个类的静态构造函数中。 无论您的服务是在进程内运行还是在单独的进程中运行,框架都会为您处理。

如果您在库的JNI_OnLoad()中做了一些敏感的工作, JNI_OnLoad()可能要特别小心,不要JNI_OnLoad()执行两次。

  相关解决方案