簡體   English   中英

如何在Xamarin.Android中“卸載”本機庫?

[英]How to “unload” native library in Xamarin.Android?

我可以加載本機庫,例如JavaSystem.LoadLibrary("my_library") ,然后調用它的函數。 使用后如何“卸載”或“處置”已加載的庫? 我真的應該這樣做嗎? 是否有加載庫的“生命周期”?

是否有加載庫的“生命周期”?

是的,在Java中,它基於執行LoadLibrary的“類加載器”。

因此,假設您正在將共享庫加載到名為X的類中,則當垃圾回收了加載該庫的X實例時,由於沒有引用該共享庫的信息,該共享庫也會從內存中刪除/清除。

注意:請記住,如果要在Xamarin / Mono托管的Java運行時中加載它,因此可能會有.Net / Java對等對象,並且對於Java到該加載程序類的GC,需要釋放其.Net對等對象(設置)。

我真的應該這樣做嗎?

假設您的代碼沒有泄漏任何一個對等對象,則Java運行時將在有能力時清除分配給共享庫的內存。

注意:如果共享庫功能受到限制,我建議您使用自己的C#/ Java.Lang.Object類隔離LoadLibrary ,不要在App的Application子類或Activity的子類中使用它,以便您可以控制其生命周期直接。

在性能方面,請記住,加載該共享庫會受到懲罰,因此,如果您的應用使用情況有規定,您可能希望保留對該類加載器的引用,而不是始終將其加載到GC中,即速度為訪問與內存消耗之間的關系,但只有您才能根據對應用進行性能分析來做出決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM