我正在开发一个Xamarin.Forms应用程序,
在我的一个页面中,我有多个包含Image的自定义StackLayout(ActivityTypeView)。这些StackLayout在我的页面中的Grid中创建并动态添加。
在我的ActivityTypeView中,我将Image源设置如下:
WorkIcon.Source = ImageSource.FromFile("disable.png");
(我的图像保存在我的可绘制文件夹中)
问题在于,当我转到另一个页面并多次返回时,在尝试加载图像时,我总是在某个时候出现OutOfMemory异常。
我认为当我改变页面时,我的ImageSource不会被销毁/处置。因此,在我多次重新加载同一页面后,它总是会出现此错误。
我想知道如何处理这种情况。如何妥善处理资源?何时?
答案 0 :(得分:2)
我习惯使用FFImageLoadingLibrary来处理正确的缓存和重用图像资源。例如,在您的情况下,它将帮助您始终使用相同的内存中映像,而不是每次都加载一个新映像,最终导致OutOfMemoryException。
您可以使用CachedImage简单地替换所有Image类,并设置一些控制缓存,下采样和其他内容的属性。这是文档:Xamarin.Forms API
答案 1 :(得分:1)
我不确定你的图像是否很大但如果是,你不应该将整个图像文件加载到内存中。 Here是一种使用imageview边界加载图像的方法。它适用于Android,但肯定有Xamarin.Forms
的等价物