Xamarin Universal Image Loader Исключение нехватки памяти

Мне удалось преобразовать универсальный загрузчик изображений для использования с xamarin.android. Все работает нормально, пока я не показываю большой список изображений - начало появляться исключение OOM. Я пробовал все возможные комбинации настроек кеша/изображения, предложенные на сайте UIL или в ответах stackoverflow - в моем случае ни одна из них не работает.

Я использую Android Debug Monitor, чтобы посмотреть, что происходит. И из того, что я могу сказать, есть утечка памяти, вызванная UIL. Я могу сказать это, потому что, если не использовать загрузчик изображений для загрузки растровых изображений, утечки нет. Но я начинаю думать, что причина этой утечки напрямую не связана с UIL, потому что она существует независимо от того, какую конфигурацию я выберу.

Вот у меня вопрос, что еще может быть?


person Lukasz S    schedule 20.02.2014    source источник
comment
Есть ли шанс, что вы могли бы поделиться своим портом?   -  person Danyal Aytekin    schedule 12.05.2014
comment
что вы подразумеваете под «мой порт»?   -  person Lukasz S    schedule 20.05.2014
comment
Ваша версия Universal Image Loader :)   -  person Danyal Aytekin    schedule 20.05.2014


Ответы (1)


Итак, после отладки и поиска в Google я обнаружил эту Статья о сборе мусора Xamarin. Вывод состоит в том, что растровые изображения, загруженные UIL (с кешем или без него), не могут быть выпущены, поскольку существует связь между управляемым экземпляром Bitmap (Mono/.net) и фреймворком Bitmap (Java). Чтобы разорвать эту связь, я вызываю bitmap.Dispose() в OnLoadingComplete в моей реализации IImageLoadingListener.

    public void OnLoadingComplete(string p0, View p1, Bitmap p2)
    {
        var spinner = ((View)p1.Parent).FindViewById<ProgressBar>(Resource.Id.loading);
        spinner.Visibility = ViewStates.Gone;
        p2.Dispose();
    }
person Lukasz S    schedule 20.02.2014
comment
не очень понимаю. проклятие - person filthy_wizard; 01.06.2016