[英]Include native library in NuGet package consumed by 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.