大家好,我有一个位图图像数组。 当我尝试将此数组保存在共享首选项中时 内存不足:错误
我已经将图像保存在不同的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();
停止尝试在 JSON 中保存大位图。也:
-
将它们保留为可绘制资源,这是用户想要的,或者
-
将它们另存为单独的位图文件(PNG,JPEG(,由于额外的I/O时间和磁盘空间,用户会不喜欢这些文件,但至少它不会像您正在采取的方法那样多额外的I/O时间和磁盘空间(并失败(