【发布时间】:2015-01-12 18:26:17
【问题描述】:
我正在尝试在我的Fragment 中使用this solution,但是我不确定在哪里调用System.LoadLibrary(),最后我决定从Fragment 的onCreate 方法调用,我想确定这是否不会在不同的设备上引发另一个奇怪的错误。
【问题讨论】:
标签: android android-ndk java-native-interface loadlibrary
我正在尝试在我的Fragment 中使用this solution,但是我不确定在哪里调用System.LoadLibrary(),最后我决定从Fragment 的onCreate 方法调用,我想确定这是否不会在不同的设备上引发另一个奇怪的错误。
【问题讨论】:
标签: android android-ndk java-native-interface loadlibrary
一般它不会引起奇怪的行为,因为onCreate 是系统创建片段时的强制回调。这确保在您对片段进行进一步操作之前准备好您的本机库。
看看片段life cycle,如果你把你的库初始化例程放在第一个回调onAttach上可能会更好,你可以使用附加的Activity上下文来初始化你的原生库。
【讨论】:
这只是一个静态初始化。您甚至根本不必将它放在您的onCreate() 中。您可以简单地将其初始化为类的第一部分,紧邻全局变量,如下所示:
class YourClass
{
static
{
System.loadLibrary( yourLib );
}
...
}
重要的是尽早完成,否则您可能会看到UnsatisfiedLinkError,然后是应用程序崩溃。这样,每当稍后引用的调用发生时,库本身就已经被加载。一旦请求了类的实例,顶部的静态声明就会执行此操作;甚至早于onCreate()。
【讨论】: