C# Xamarin android-在创建位图和设置为查看页面中的ImageView时使用OutOfMemory
我最近开始玩Xamarin Android,发现当你使用带有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
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();
我不太喜欢这种方法,但它确实起作用,而且似乎不会引起任何其他问题