【发布时间】:2012-05-18 00:29:44
【问题描述】:
我遇到了零星的、难以重现的 UnsatisfiedLinkErrors,最常见的情况是我的应用程序已暂停很长时间(即数小时)。这些错误发生在正常工作的 JNI 调用上。
Android 有时会在未完全关闭应用程序的情况下卸载库吗?我在一项活动中加载我的本机库,但也在另一项活动中使用它。 Android 是否会破坏加载库并卸载它的 Activity,然后在恢复使用它的其他 Activity 时无法重新加载库?
【问题讨论】:
-
您能否确定(例如通过检查进程 ID)活动的“恢复”是否发生在最初加载库的同一进程中?我怀疑简历是在一个从未加载过的新进程中发生的。
-
假设是这种情况,无论新进程中哪个活动首先开始,确保库只加载一次的正确方法是什么?
-
简单地尝试在需要它的每个活动中加载它怎么样? java.sun.com/docs/books/jni/html/design.html 建议“如果之前对 System.loadLibrary 的调用已经加载了相同的本机库,则 System.loadLibrary 会静默完成。”
-
谢谢@Chris。我在我的顶级活动中加载库,但在不同的活动中声明了它的所有方法。在声明方法的同一活动中将库加载到静态块中似乎可以解决问题。静态块似乎在第一次调用任何静态本机方法时执行,即使尚未创建 Activity 的实例。
标签: android android-ndk java-native-interface