gpt4 book ai didi

android - 如何使用 static{System.loadLibrary()} 在 android 中加载 native 库

转载 作者:行者123 更新时间:2023-11-29 00:30:04 28 4
gpt4 key购买 nike

我在研究android源码,发现framework中有很多地方使用native code,而没有使用static{System.loadLibrary()}。

例如,在 SystemServer.java 中,本地方法“init1(args)”被调用,但文件中没有 static{System.loadLibrary()}。如何在没有静态{System.loadLibrary()}的情况下加载 native 代码?谢谢。

最佳答案

native 库只需为整个应用程序加载一次,因此它可能已经被之前实例化的另一个类加载了。请注意,这不是最佳实践,因为它对类的调用顺序做出了假设!

避免这种情况的常用技术是创建一个 Loader 类,如下所示:

class Loader {
private static boolean done = false;

protected static synchronized void load() {
if (done)
return;

System.loadLibrary("library_name");

done = true;
}
}

这样,如果您在每个需要使用 native 函数的类上调用 static{Loader.load();},您可以确保库已加载(且仅加载一次)。

关于android - 如何使用 static{System.loadLibrary()} 在 android 中加载 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334506/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com