ImageSource 未处理并创建 OutOfMemoryException

ImageSource not disposed and creating OutOfMemoryException

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

在我的一个页面中,我有多个包含图像的自定义 StackLayout (ActivityTypeView)。这些 StackLayout 是在我的页面的网格内动态创建和添加的。

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

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

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

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

我想我的 ImageSource 在我更改页面时不是 destroyed/Disposed。因此,在我多次重新加载同一页面后,它总是会出现此错误。

我想知道如何处理这种情况。如何正确处理资源以及何时处理?

我已经养成了使用 FFImageLoadingLibrary 的习惯,它负责正确缓存和重用图像资源。例如,在您的情况下,它会帮助您始终使用相同的内存中图像,而不是每次都加载一个新图像,最终导致 OutOfMemoryException。

您可以简单地将所有图像 类 替换为 CachedImage 并设置相当多的属性来控制缓存、下采样和其他内容。这是文档:Xamarin.Forms API

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

的等价物