从片段的onCreate方法调用System.LoadLibrary()是不对的?

时间:2015-01-12 18:26:17

标签: android android-ndk java-native-interface loadlibrary

我想在Fragment内使用this solution,但我无法确定在哪里拨打System.LoadLibrary(),最后我决定从onCreate拨打电话Fragment的方法,我想确定这是否会在不同设备上引发另一个奇怪的错误。

2 个答案:

答案 0 :(得分:1)

这只是一个静态初始化。你甚至不必将它放在你的onCreate()里面。您可以简单地将它初始化为您的全局变量旁边的类的第一部分:

class YourClass
{
   static
   {
       System.loadLibrary( yourLib );
   }

   ...
}

唯一重要的是提前完成,或者您可能会看到UnsatisfiedLinkError然后应用程序崩溃。这样,无论何时进行稍后引用的调用,库本身都已被加载。一旦请求了类的实例,顶部的静态声明就会这样做;甚至在onCreate()之前。

答案 1 :(得分:1)

一般情况下,它不会导致奇怪的行为,因为当您的片段由系统创建时,onCreate是必需的回调。这样可以确保在片段中进一步操作之前准备好本机库。

看一下片段life cycle,如果你把库初始化例程放在第一个回调onAttach上可能会更好,你可以使用附加的Activity上下文来初始化你的原生库。