【问题标题】:Would it be wrong to call System.LoadLibrary() from onCreate method of a fragment?从片段的 onCreate 方法调用 System.LoadLibrary() 会不会出错?
【发布时间】:2015-01-12 18:26:17
【问题描述】:

我正在尝试在我的Fragment 中使用this solution,但是我不确定在哪里调用System.LoadLibrary(),最后我决定从FragmentonCreate 方法调用,我想确定这是否不会在不同的设备上引发另一个奇怪的错误。

【问题讨论】:

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


    【解决方案1】:

    一般它不会引起奇怪的行为,因为onCreate 是系统创建片段时的强制回调。这确保在您对片段进行进一步操作之前准备好您的本机库。

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

    【讨论】:

      【解决方案2】:

      这只是一个静态初始化。您甚至根本不必将它放在您的onCreate() 中。您可以简单地将其初始化为类的第一部分,紧邻全局变量,如下所示:

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

      重要的是尽早完成,否则您可能会看到UnsatisfiedLinkError,然后是应用程序崩溃。这样,每当稍后引用的调用发生时,库本身就已经被加载。一旦请求了类的实例,顶部的静态声明就会执行此操作;甚至早于onCreate()

      【讨论】:

      • 正如我在问题中明确指出的那样,由于这个解决方案stackoverflow.com/questions/18111739/…,我在调用 loadLibrary 时需要访问上下文
      • @user65721 您没有在问题中说明这一点。你可以早点做,但如果片段是你将使用库的第一个地方,那么在那里做应该没有问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多