Xamarin android - OutOfMemory在创建位图和设置ImageView在视图页
本文关键字:设置 ImageView 视图 创建 android OutOfMemory Xamarin 位图 | 更新日期: 2023-09-27 18:06:59
我最近开始玩Xamarin-Android,发现当你使用ViewPager
与ImageView
和Bitmap
和OutOfMemoryError
将发生非常快。
我已经创建了2个小的测试应用程序,其目的只是为了显示这种行为。一个应用程序是用Xamarin在C#
中编程的,另一个是Java
中一个常见的android项目。两个应用程序都包含一个包含20页(片段)的ViewPager
。Fragment
再次包含一个ImageView
,它获得一个红色的Bitmap
集:
Bitmap bitmap = Bitmap.createBitmap(2000, 2000, Bitmap.Config.ARGB_8888);
bitmap.eraseColor(Color.RED);
mImageView.setImageBitmap(bitmap);
现在滑动页面,看看Android Studio内存监视器。如果你比较这两个应用程序,你会注意到通常的android应用程序的行为与预期一样,内存使用保持在一定的MB量。另一方面,Xamarin应用程序的内存随着每次滑动页面而增加,直到出现OutOfMemorError
。
所以我现在的问题是为什么会发生这种情况以及我如何防止OutOfMemoryError
?
我试着像下面这样创建Bitmap
,但没有帮助:
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();
我不太喜欢这种方法,但它确实有效,而且似乎没有引起任何其他问题。