gpt4 book ai didi

java - 调整图像大小时内存不足

转载 作者:行者123 更新时间:2023-11-29 20:08:46 26 4
gpt4 key购买 nike

当我有很多可用空间时,我会得到 OutOfMemory。我不明白为什么。在我的应用程序中,我有一个简单的流程:

  1. 导航到“拍照”功能
  2. 拍照并显示缩略图
  3. 调整大小并保存拍摄的照片(调整大小无需 Picasso 帮助)
  4. 重复 2 和 3 几次
  5. 通过网络发送拍摄的照片。

下面显示了上述步骤的内存使用图。一切都很完美。没有发生 OutOfMemory。

enter image description here

但是我注意到一件事。一个流程:

  1. 就在“拍照”功能之前,我有一个菜单。当我不断切换屏幕方向时,内存使用量会增加(每次切换约 2MB)。
  2. 拍照并显示缩略图。照片已拍摄,但 Picasso 未显示缩略图。我看到 Picasso 很好地处理了 OutOfMemory 并且没有停止应用程序。 android.graphics.BitmapFactory.nativeDecodeStream 中的 java.lang.OutOfMemoryError
  3. 调整大小并保存会导致相同的 OutOfMemory(java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeStream)并停止应用程序

在第一个图表上,我看到“图片处理”占用大约 20MB。在第二张图中,我看到有超过 20MB 的可用空间,但发生了 OutOfMemory。为什么?收集来自切换方向的垃圾。

enter image description here

最佳答案

On the second diagram I see that there is more than 20MB free but OutOfMemory occurs. Why?

因为您没有足够的可用内存块来处理任何分配失败的情况,并且您已经达到堆限制,所以 Android 无法进一步扩展堆。

在普通 Java 中,垃圾收集器是一个“移动”收集器,它会在堆中移动对象以合并空闲内存块。因此,当您尝试分配某些内容但分配失败时,您确实内存不足。

Android 总体上不使用移动收集器,因为它会占用过多的 CPU 时间并损害用户体验。因此,您的堆空间可能会变得 fragment 化。您可能有很多空闲堆空间,但它们都小于您期望的分配。

(异常(exception)情况是在 Android 5.0+ 上,当您的应用程序处于后台时,ART 将使用移动收集器)

关于java - 调整图像大小时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316890/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com