加载图像时出现OutOfMemoryError

AMb*_*AMb 5 xamarin xamarin.forms

我有一个显示图像的简单页面.来源是一个URL

   var img = new Image ();
    var source = new UriImageSource {
        Uri = new Uri (string.Format ("http://xxxx.com/imagem/?{0}", url)),
            CachingEnabled = false
        };
        img .Source = source;
Run Code Online (Sandbox Code Playgroud)

但当我访问此页面(),第四次或第五次,我得到此错误

java.lang.OutOfMemoryError
    at android.graphics.Bitmap.nativeCreate(Native Method)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:928)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:901)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:868)
    at md5530bd51e982e6e7b340b73e88efe666e.ButtonDrawable.n_draw(Native Method)
    at 340b73e88efe666e.ButtonDrawable.draw(ButtonDrawable.java:49)
    at android.view.View.draw(View.java:15235)
    at android.view.View.getDisplayList(View.java:14141).....
Run Code Online (Sandbox Code Playgroud)

Gre*_*eri 4

我们遇到了一个非常相似的问题。Xamarin似乎已经发布了有关该问题的一些指南,但它并不真正适合 Xamarin Forms。基本上,在设置图像源之前,您需要决定是否应该缩小图像,并手动执行。这可能需要自定义渲染器。

似乎 Xamarin Forms 应该为我们做一些事情,但有时我认为你必须接受坏处和好处。

是 Xamarin 论坛上有关此问题的讨论。

更新: 我刚刚注意到您说这种情况仅在页面加载第四或第五次后才会发生。我们在解决该问题的页面上创建了一个解决方法。基本上,您必须将图像的 Source 设置回 null,并在页面消失时强制进行垃圾回收。像这样:

protected override void OnDisappearing ()
{
    base.OnDisappearing ();
    img.Source = null;
    GC.Collect ();
}
Run Code Online (Sandbox Code Playgroud)