C# Xamarin android-在创建位图和设置为查看页面中的ImageView时使用OutOfMemory

C# Xamarin android-在创建位图和设置为查看页面中的ImageView时使用OutOfMemory,c#,xamarin.android,out-of-memory,android-imageview,C#,Xamarin.android,Out Of Memory,Android Imageview,我最近开始玩Xamarin Android,发现当你使用带有ImageView和Bitmap的ViewPager时,会很快出现OutOfMemoryError错误 我创建了一个,它的目标只是展示这种行为。一个应用程序在C中使用Xamarin编程,另一个是Java中常见的android项目。两个应用程序都包含一个包含20页(片段)的ViewPager。片段再次包含一个图像视图,该视图获取一个红色的位图集: Bitmap bitmap = Bitmap.createBitmap(2000, 2000

我最近开始玩Xamarin Android,发现当你使用带有
ImageView
Bitmap
ViewPager
时,会很快出现
OutOfMemoryError
错误

我创建了一个,它的目标只是展示这种行为。一个应用程序在
C
中使用Xamarin编程,另一个是
Java
中常见的android项目。两个应用程序都包含一个包含20页(片段)的
ViewPager
片段
再次包含一个
图像视图
,该视图获取一个红色的
位图
集:

Bitmap bitmap = Bitmap.createBitmap(2000, 2000, Bitmap.Config.ARGB_8888);
bitmap.eraseColor(Color.RED);
mImageView.setImageBitmap(bitmap);
现在浏览页面,看看Android Studio内存监视器。如果你比较这两个应用程序,你会发现通常的android应用程序的行为与预期一样,内存使用量保持在一定的MB。另一方面,Xamarin应用程序的内存会随着每次页面滑动而增加,直到出现
OutOfMemorError
为止

所以我现在的问题是为什么会发生这种情况,以及如何防止
OutOfMemoryError

我试图创建如下所示的
位图
,但没有帮助:

using(var bitmap = Bitmap.CreateBitmap(2000, 2000, Bitmap.Config.Argb8888)) {
    bitmap.EraseColor(Color.Red);
    mImageView.SetImageBitmap(bitmap);
}
另外,
OnStop()
方法中的一些位图回收和其他内容没有改变任何东西:

public override void OnStop()
{
    base.OnStop();
    ((BitmapDrawable) mImageView.Drawable).Bitmap.Recycle();
    ((BitmapDrawable) mImageView.Drawable).Bitmap.Dispose();
    mImageView.SetImageBitmap(null);
    mImageView.Dispose();
}

您有什么建议吗?

因此,我能找到的唯一解决问题的方法是在
OnStop()
方法中手动调用垃圾收集,如下所示:

GC.Collect();

我不太喜欢这种方法,但它确实起到了作用,而且似乎不会引起任何其他问题。

因此,我能找到的唯一解决问题的方法是在
OnStop()
方法中手动调用垃圾收集,如下所示:

GC.Collect();
我不太喜欢这种方法,但它确实起作用,而且似乎不会引起任何其他问题