Как «выгрузить» нативную библиотеку в Xamarin.Android? - PullRequest
0 голосов
/ 22 декабря 2018

Я могу загрузить нативную библиотеку, например JavaSystem.LoadLibrary("my_library"), и затем вызывать ее функции.Как я могу «выгрузить» или «утилизировать» загруженную библиотеку после использования?И должен ли я действительно сделать это?Есть ли «жизненный цикл» загруженной библиотеки?

1 Ответ

0 голосов
/ 22 декабря 2018

Есть ли "жизненный цикл" загруженной библиотеки?

Да, в Java он основан на "загрузчике классов", который выполнил LoadLibrary.

Таким образом, предполагая, что вы загружаете разделяемую библиотеку в классе с именем Xкогда экземпляр X, который загрузил библиотеку, собран, собран, общая библиотека также удаляется / удаляется из памяти, так как на нее нет ссылок.

Примечание. Помните, что если вы загружаете это вСреда выполнения Java, которая размещается в Xamarin / Mono, и, таким образом, у вас могут быть .Net / Java одноранговые объекты , а для Java в GC этот загрузочный класс, его одноранговый объект .Net должен быть освобожден (ликвидирован).

И действительно ли мне нужно это делать?

Если ваш код не пропускает ни один из одноранговых объектов, среда выполнения Java очистит память, выделенную вашей общей библиотеке, когдаэто возможно.

Примечание. Если использование ваших общих библиотечных функций ограничено, я бы порекомендовал вам изолировать ваш LoadLibrary с его собственным классом C # / Java.Lang.Objectне используйте его в подклассе приложения или в подклассе действия, чтобы вы могли напрямую управлять его жизненным циклом.

С точки зрения производительности, помните, что за загрузку этой общей библиотеки взимается штраф, поэтому, если ваш шаблон использования приложений используетсядиктует, что вы можете захотеть хранить ссылку на этот загрузчик классов, вместо того, чтобы позволить ему постоянно работать с GC, то есть скорость доступа и потребление памяти, но только вы можете сделать это определение на основе профилирования приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...