在Android上加载大图像以进行裁剪时如何防止内存不足错误?

时间:2017-12-11 02:11:15

标签: android image out-of-memory

我的Android应用正在尝试加载大型照片(Facebook个人资料照片)并让用户裁剪它们。这适用于大多数用户。一小部分用户会出现内存不足错误。

通常,在处理大图像时,我使用Glide。 Glide处理将照片调整为实际可见尺寸。

在这种情况下,我正在使用图像裁剪库(com.theartofdev.edmodo:android-image-cropper)。用户必须能够放大照片。图书馆必须将裁剪的照片还给我。因此,必须加载实际的全分辨率。

因为当前的行为几乎适用于所有用户,所以我正在考虑使用特殊代码来检测是否会发生内存不足错误。如果它发生,它必须是低端手机。然后,下采样会发生,但只能使电话工作(并且仍然可以缩放/裁剪)。

如何检测加载图像是否会发生内存不足错误?

如何在没有内存不足错误的情况下预测图像可能达到的最大分辨率?

android:largeHeap =“true”会解决这个问题吗? (我没有遇到错误的特定手机.Crashlytics正在为少数用户报告。)

我应该计算可用的堆大小和预期的图像大小来决定是否需要下采样吗?

final Runtime runtime = Runtime.getRuntime();
final long usedMemInMB=(runtime.totalMemory() - runtime.freeMemory()) / 1048576L;
final long maxHeapSizeInMB=runtime.maxMemory() / 1048576L;
final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;

(找到代码)

1 个答案:

答案 0 :(得分:0)

试试这个对我有用: -         android:hardwareAccelerated =“true”在Manifiest中使用它

并在gradle中添加以下行: -

机器人 {  ....  dexOptions {     //在构建阶段使用MultiDex防止OutOfMemory     javaMaxHeapSize“4g”   } }