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

时间:2015-10-22 05:37:13

标签: android memory service java-native-interface

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

1 个答案:

答案 0 :(得分:0)

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

除非您有一些非常特殊的设置,否则建议将private void showNameButton_Click(object sender, EventArgs e) { string searchKey ="David"; string output = ""; string[] names = { "Abby", "Bill", "Connie", "David", "Eddy"}; foreach(var name in names) { if(name == searchKey){ output = name; break; } } array1Label.Text = output; } 放在使用此本机库的类(或类)的静态构造函数中。无论您的服务是在进程中运行还是在单独的进程中运行,框架都将为您处理此问题。

如果你在图书馆的System.load()做一些敏感工作,你可能会特别注意不要两次做这项工作。