Bitmap.CreateBitmap异常 - 内存不足

时间:2015-09-07 15:42:43

标签: c# android bitmap out-of-memory xamarin.forms

protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        global::Xamarin.Forms.Forms.Init (this, bundle);
        LoadApplication (new App ());
        if (bitmapChart != null && !bitmapChart.IsRecycled)
        {
            bitmapChart.Recycle();
        }
        bitmapChart = Android.Graphics.Bitmap.CreateBitmap (2000, 800, Android.Graphics.Bitmap.Config.Argb8888);            
    }

public volatile Android.Graphics.Bitmap bitmapChart;

我想创建易失性Bitmap。 当我第三次打开我的应用程序时,我有异常:Java.Lang.OutOfMemoryError。

如果我使用静态Bitmap而不是volatile Bitmap,应用程序可以正常工作,我可以多次打开它。

为什么我不能使用volatile Bitmap?

1 个答案:

答案 0 :(得分:1)

  • 您应该设置更大的Java Heap size。转到Android项目选项 - >高级并将Java Heap size设置为1G或2G。

  • 在Android应用程序清单中将android:largeHeap设置为true

  

android:largeHeap你的应用程序的进程是否应该是   用大型Dalvik堆创建。这适用于所有流程   为应用程序创建。它仅适用于第一个应用程序   加载到一个过程中;如果您使用共享用户ID允许   要使用一个进程的多个应用程序,它们都必须使用此选项   一直或他们将有不可预测的结果。大多数应用应该   不需要这个,而应该专注于减少他们的整体   内存使用以提高性能。启用此功能也不会   保证固定增加可用内存,因为有些设备   受到总可用内存的限制。

     

要在运行时查询可用内存大小,请使用这些方法   getMemoryClass()或getLargeMemoryClass()。