我在xamarin表单列表视图中遇到了图像加载的内存问题,现在我需要在表单中实现位图图像但是我不能在xamarin表单中这样做我无法找到包含位图的任何命名空间xamarin形式 我有一个普通的数据绑定代码,也可以绑定图像
public async void GetResult()
//public void GetResult()
{
try
{
IsBusy = true;
var client = new HttpClient();
var json = await client.GetStringAsync(string.Format(Url));
var items = JsonConvert.DeserializeObject<ObservableCollection<cm_main_category>>(json.ToString());
foreach (var item in items)
{
item.image_url = "http://somelink.net" + item.image_url.Substring(1, item.image_url.Length - 1);
// item.image_url = "http://127.0.0.1" + item.image_url.Substring(1, item.image_url.Length - 1);
ListItems.Add(item);
}
IsBusy = false;
}
现在我需要为这段代码实现位图应该是什么方法?
答案 0 :(得分:1)
如果您想节省内存,可以尝试使用FFImageLoading CachedImage
,它是Image
API兼容的替代品,具有高级内存缓存和下采样功能。只需将Image
替换为CachedImage
,然后设置其中一个下采样属性。
答案 1 :(得分:0)
显然,您希望通过URI绑定图像。在Xamarin.Forms中这很容易。
您只需将ImageSourceProperty
的{{1}}绑定到知道URI的属性即可。
可以在此处找到XAML绑定和C#绑定的一个很好的示例:https://www.syntaxismyui.com/xamarin-forms-listview-imagecell-recipe/
编辑: 从注释中复制:解决方案是将图像源设置为null并按照此处所述触发垃圾回收:OutOfMemoryError when loading an image
答案 2 :(得分:0)
protected override void OnDisappearing()
{
BindingContext = null;
Content = null;
base.OnDisappearing();
GC.Collect();
}
在某些应用中,如果你的应用处理成千上万的数据,图像更好地添加位图
,这将有所帮助