【问题标题】:java.lang.OutOfMemoryError: Failed to allocate a 301989896 byte allocation with 16773216 free bytes and 160MB until OOMjava.lang.OutOfMemoryError:无法分配 301989896 字节分配,16773216 可用字节和 160MB 直到 OOM
【发布时间】:2018-06-29 11:52:03
【问题描述】:

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

是显示。我能做些什么。我已经将我的图像保存在不同的drawable likemdpi,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();

【问题讨论】:

  • 不要将问题格式化为代码。
  • 哈哈。所以每个人遇到这个错误时都需要购买新的android
  • 如果你想把这些图片作为一个列表显示给用户,用户可以选择其中一张作为壁纸,为什么你把所有的图片都显示为大尺寸?如果用户想要查看详细的图像,您可以降低图像分辨率并显示全尺寸图像。
  • 300MB 对于嵌入式设备来说是相当大的内存......
  • 目前尚不清楚您希望如何以及如何处理图像,但您可以为图像分配索引或代号并将它们保存到 SharedPreferences 而不是图像。然后,使用 and if 或 switch 根据需要对保存的索引执行任何操作。

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


【解决方案1】:

停止尝试以 JSON 格式保存大型位图。要么:

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

  • 将它们保存为单独的位图文件(PNG、JPEG),由于额外的 I/O 时间和磁盘空间,用户会不喜欢这些文件,但至少不会像 那么多 em> 额外的 I/O 时间和 与您正在采用的方法一样多的磁盘空间(并且失败了)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多