java.lang.OutOfMemoryError:无法分配带有16773216个空闲字节的301989896字节分配和160MB直到OOM

时间:2018-01-20 09:45:59

标签: java android gson out-of-memory sharedpreferences

大家好,我有一个位图图像数组。当我尝试在SharedPreferences OutOfMemory中保存此数组时:错误

显示。我能做什么。我已将我的图片保存在drawable mdpi,ldpi,hdpi,xhdpi,xxhdpi,xxhdpi之内,并在清单中添加android:largeHeap="true"

在此行中出错。 editor.putString(" Array",new Gson()。toJson(Combinebitmaps));

错误是这样的:

  

java.lang.OutOfMemoryError:无法分配301989896字节   分配16773216个空闲字节和160MB直到OOM

我的完整代码就在这里。

    ArrayList<Model> Combinebitmaps=new ArrayList<>();
     int arr[]={R.drawable.b1,R.drawable.b2,R.drawable.b3,R.drawable.b4,R.drawable.b5,
R.drawable.b6,R.drawable.b7,R.drawable.b8,R.drawable.b9,R.drawable.b10,
R.drawable.b11,R.drawable.b12,R.drawable.b13,R.drawable.b14,R.drawable.b15,
R.drawable.b16,R.drawable.b17,R.drawable.b18,R.drawable.b19,R.drawable.b20,
R.drawable.b21,R.drawable.b22,R.drawable.b23,R.drawable.b24,R.drawable.b25,
R.drawable.b26};
                for (int i=0;i<arr.length;i++){
              Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(), arr[i]);
                    Model model=new Model(bitmap);
                    Combinebitmaps.add(model);
                }
    SharedPreferences sharedPreferences = MainActivity.this.getSharedPreferences("ArrayCombine", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor =sharedPreferences.edit();
                editor.putString("Array", new Gson().toJson(Combinebitmaps));
                editor.commit();

1 个答案:

答案 0 :(得分:1)

停止尝试在JSON中保存大型位图。之一:

  • 将它们保留为可绘制资源,这是用户想要的,或

  • 将它们保存为单独的位图文件(PNG,JPEG),由于额外的I / O时间和磁盘空间,用户不喜欢它们,但至少它不会像那样多额外的I / O时间以及很多磁盘空间作为您正在采取的方法(并且失败)