Android java.lang.OutOfMemoryError:无法分配31961100字节的分配,其中包含15257484个可用字节和14MB的内存,直到OOM
我正在做下面这样的缩放地图Android java.lang.OutOfMemoryError:无法分配31961100字节的分配,其中包含15257484个可用字节和14MB的内存,直到OOM,android,Android,我正在做下面这样的缩放地图 Bitmap resizedBitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(picturePath), 960, 730, false); 做这个处理,我上传了一个图像,有时我得到下面的类型错误 java.lang.OutOfMemoryError: Failed to allocate a 31961100 byte allocation with 15257484 free bytes a
Bitmap resizedBitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(picturePath), 960, 730, false);
做这个处理,我上传了一个图像,有时我得到下面的类型错误
java.lang.OutOfMemoryError: Failed to allocate a 31961100 byte allocation with 15257484 free bytes and 14MB until OOM
请帮助我如何解决?这是如何使用
BitmapFactory。选项
:
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
options.inSampleSize = 2;
options.inJustDecodeBounds = false;
options.inTempStorage = new byte[16 * 1024];
Bitmap bmp = BitmapFactory.decodeFile(picturePath,options);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bmp, 960, 730, false);
您还可以通过编写自定义函数来计算位图的inSampleSize
以下是谷歌文档:
您可以通过在清单中添加android:largeHeap=“true”
来增加分配给应用程序的内存
注意:为应用程序增加堆
并不是理想的解决方案
这是谷歌的摘录解释了这一点
但是,请求大型堆的功能仅适用于
可以证明需要消耗更多RAM的一小部分应用程序(例如
作为一个大型照片编辑应用程序)。不要简单地请求一个大堆
因为您的内存不足,需要快速修复,您应该
只有当你确切地知道你所有的记忆都在哪里时才使用它
分配以及为什么必须保留。然而,即使你很自信
你的应用程序可以证明大堆的合理性,你应该避免请求它
尽可能多。使用额外的内存将越来越困难
因为垃圾而损害了整体用户体验
收集将花费更长的时间,并且当
任务切换或执行其他常见操作
以下是文档的完整链接这是如何使用
位图工厂。选项
:
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
options.inSampleSize = 2;
options.inJustDecodeBounds = false;
options.inTempStorage = new byte[16 * 1024];
Bitmap bmp = BitmapFactory.decodeFile(picturePath,options);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bmp, 960, 730, false);
您还可以通过编写自定义函数来计算位图的inSampleSize
以下是谷歌文档:
您可以通过在清单中添加android:largeHeap=“true”
来增加分配给应用程序的内存
注意:为应用程序增加堆
并不是理想的解决方案
这是谷歌的摘录解释了这一点
但是,请求大型堆的功能仅适用于
可以证明需要消耗更多RAM的一小部分应用程序(例如
作为一个大型照片编辑应用程序)。不要简单地请求一个大堆
因为您的内存不足,需要快速修复,您应该
只有当你确切地知道你所有的记忆都在哪里时才使用它
分配以及为什么必须保留。然而,即使你很自信
你的应用程序可以证明大堆的合理性,你应该避免请求它
尽可能多。使用额外的内存将越来越困难
因为垃圾而损害了整体用户体验
收集将花费更长的时间,并且当
任务切换或执行其他常见操作
这里是文档的完整链接使用
BitmapFactory.Options
对象作为decodeFile()
的第二个参数。将BitmapFactory.Options
上的inSampleSize
设置为一个值,该值将使您接近所需的缩放大小。您的操作将需要比可用内存更多的内存。您希望我们提供什么样的解决方案/帮助?@Commonware请给我如何使用BitmapFactory.Options的示例?@anderas请给我如何增加内存的解决方案?使用BitmapFactory.Options
对象作为decodeFile()
的第二个参数。将BitmapFactory.Options
上的inSampleSize
设置为一个值,该值将使您接近所需的缩放大小。您的操作将需要比可用内存更多的内存。您希望我们提供什么样的解决方案/帮助?@commonware请给出如何使用BitmapFactory.Options的示例?@anderas请给出如何增加内存的解决方案?