2012-05-18 69 views
3

当我的应用程序长时间(即数小时)暂停时,我得到零星的,难以重现的UnsatisfiedLinkErrors。这些错误发生在正常工作的JNI调用上。间歇性Android NDK UnsatisfiedLinkError

Android是否有时在没有完全关闭应用程序的情况下卸载库?我在一个活动中加载我的本地库,但也在另一个活动中使用它。 Android可以销毁加载库并卸载它的活动,然后在使用它的其他活动恢复时无法重新加载库?

+0

你可以通过检查进程ID来确定活动的“简历”是否发生在最初加载库的同一个进程中?我的怀疑是,简历是在一个从未加载的新过程中发生的。 –

+0

假设情况如此,无论哪个活动在新进程中首先启动,确保只加载一次库的正确方法是什么? – pbsurf

+0

如何简单地将它加载到需要它的每个活动中? http://java.sun.com/docs/books/jni/html/design.html建议“如果之前对System.loadLibrary的调用已经加载了相同的本地库,System.loadLibrary将自动完成。” –

回答

1

每次你加载一个库,像这样的活动,

static { 
     System.loadLibrary("gamescript"); 
    }  

然后库Activity类像本地静态成员中加载,并且不会被卸载,直到应用程序是活的。但是,我的疑问是,如果它可以从课堂外访问。

+0

你有没有证据表明卸货会发生? –

+0

@ChrisStratton对不起,早先的说法是错误的。感谢您指出。 – codetiger

+0

像这个答案在下面说的,静态成员存储在永久生成部分 http://stackoverflow.com/a/3800592/409315 – codetiger

相关问题