2014-02-20 2 views
2

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

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

Так что мой вопрос в том, что еще это может быть?

+1

Вы можете поделиться своим портом? –

+0

Что вы подразумеваете под «моим портом»? –

+0

Ваша версия универсального загрузчика изображений :) –

ответ

2

Итак, после отладки и поиска в Интернете я обнаружил, что Xamarin Garbage Collection Article. Заключение заключается в том, что растровые изображения, загружаемые 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(); 
    } 
+0

Dont действительно это понимает. черт –