我已设法将Universal Image Loader转换为与xamarin.android一起使用。 一切正常,直到我显示一个大的图像列表 - OOM异常开始出现。 我已尝试在UIL站点或stackoverflow答案中建议的每种可能的缓存/图像设置组合 - 似乎在我的情况下都不起作用。
我使用Android Debug Monitor来查看正在发生的事情。从我可以看出,UIL导致内存泄漏。我可以这么说,因为如果不使用图像加载器来加载位图,就没有泄漏。 但我开始认为这种泄漏的原因不是由UIL直接引起的,因为无论我选择什么配置它都在那里。
所以我的问题是它还能做什么?
答案 0 :(得分:2)
所以经过调试和谷歌搜索后,我发现Xamarin Garbage Collection Article。 结论是UIL加载(有或没有缓存)的位图无法释放,因为托管位图(Mono / .net)和框架位图(Java)实例之间存在关系。 为了打破这种关系,我在我的IImageLoadingListener实现中调用OnLoadingComplete中的bitmap.Dispose()。
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();
}