【问题标题】:How to "unload" native library in Xamarin.Android?如何在 Xamarin.Android 中“卸载”本机库?
【发布时间】:2018-12-22 16:34:46
【问题描述】:

我可以加载像 JavaSystem.LoadLibrary("my_library") 这样的原生库,然后调用它的函数。 使用后如何“卸载”或“处置”加载的库?我真的应该这样做吗?加载的库是否存在“生命周期”?

【问题讨论】:

    标签: c# android xamarin mono


    【解决方案1】:

    是否存在加载库的“生命周期”?

    是的,在 Java 中,它基于执行 LoadLibrary 的“类加载器”。

    因此,假设您在名为 X 的类中加载共享库,当加载该库的 X 实例被垃圾回收时,共享库也会从内存中删除/清除,因为没有任何引用它。

    注意:请记住,如果您在 Xamarin/Mono 托管的 Java 运行时中加载它,因此您可能有 .Net/Java 对等对象,并且对于 Java 到 GC 加载器类,其 .Net 对等对象需要释放(处置)。

    我真的应该这样做吗?

    假设您的代码没有泄漏任何对等对象,Java 运行时将在可能时清除分配给您的共享库的内存。

    注意:如果您的共享库函数的使用受到限制,我建议您将 LoadLibrary 与它自己的 C#/Java.Lang.Object 类隔离,并且不要在 App 的 Application 子类或 Activity 的子类中使用它子类,以便您可以直接控制其生命周期。

    在性能方面,请记住加载该共享库是有代价的,因此如果您的应用程序使用模式要求,您可能希望保留对该类加载器的引用,而不是让它一直被 GC,即访问速度与内存消耗,但只有您可以根据应用分析做出决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多