ImageSource未处理并创建OutOfMemoryException

时间:2017-08-31 11:38:54

标签: image xamarin xamarin.forms imagesource

我正在开发一个Xamarin.Forms应用程序,

在我的一个页面中,我有多个包含Image的自定义StackLayout(ActivityTypeView)。这些StackLayout在我的页面中的Grid中创建并动态添加。

在我的ActivityTypeView中,我将Image源设置如下:

WorkIcon.Source = ImageSource.FromFile("disable.png");

(我的图像保存在我的可绘制文件夹中)

问题在于,当我转到另一个页面并多次返回时,在尝试加载图像时,我总是在某个时候出现OutOfMemory异常。

我认为当我改变页面时,我的ImageSource不会被销毁/处置。因此,在我多次重新加载同一页面后,它总是会出现此错误。

我想知道如何处理这种情况。如何妥善处理资源?何时?

2 个答案:

答案 0 :(得分:2)

我习惯使用FFImageLoadingLibrary来处理正确的缓存和重用图像资源。例如,在您的情况下,它将帮助您始终使用相同的内存中映像,而不是每次都加载一个新映像,最终导致OutOfMemoryException。

您可以使用CachedImage简单地替换所有Image类,并设置一些控制缓存,下采样和其他内容的属性。这是文档:Xamarin.Forms API

答案 1 :(得分:1)

我不确定你的图像是否很大但如果是,你不应该将整个图像文件加载到内存中。 Here是一种使用imageview边界加载图像的方法。它适用于Android,但肯定有Xamarin.Forms

的等价物