Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.OutOfMemoryError:无法分配31961100字节的分配,其中包含15257484个可用字节和14MB的内存,直到OOM_Android - Fatal编程技术网

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请给出如何增加内存的解决方案?