【问题标题】:Memory Leak for one image一张图片的内存泄漏
【发布时间】:2018-09-19 10:03:07
【问题描述】:

您好,我的图片出现内存泄漏。我不确定为什么会泄漏,因为图像本身并不比文件夹中的任何其他图像大,当我删除该图像时,内存分配从 90mb 下降到 40mb。图像本身只有75kb,我有点困惑。

附上图片。 如果可以,请帮助我。

谢谢

【问题讨论】:

  • 您的图像是 51,84MB 而不是 75KB,因为 Bitmap 显然占用了 H x W x bytesPerPixel 内存
  • @Selvin 当我查看信息时,它说它是 75kb,见附图

标签: android memory-leaks android-imageview


【解决方案1】:

您会看到压缩后的图片大小和未压缩的图片大小之间的差异。

您的 PNG 文件是 compressed,这意味着 tricks 已用于以较小的方式存储数据。 将其加载到位图中时,它会被解压缩,因为每个像素都需要内存。

您可以阅读更多关于确定位图大小的信息herehow to use less memory for a bitmap, at the cost of losing color depth.

让我们看一个过于简单的例子:

使用您的示例图像,PNG 可能会像

一样存储数据
rectangle x1,y1 to x2,y2 is white, rectangle x3, y3 ...

这意味着图像中的每个区域只需要 4 个坐标和一种颜色。但是,在位图中,它将被存储为

pixel x1, y1 is white, pixel x2, y2 is white, ...

如您所见,此表示需要更多数据。优点是可以直接访问,不需要先解压。

【讨论】:

  • 好的,谢谢你,但我怎样才能继续减少图像的大小以允许更多的内存使用?谢谢
  • 您的图片为 2700x4800 像素。较低的分辨率会降低您的内存使用量。一半的像素只会使用一半的内存空间。请注意,您正在检查应该是高分辨率的 xxxhdpi 图像。较低密度的版本将具有较低的分辨率。确保您的应用也具有此图像的 mdpi、hdpi、... 版本。见developer.android.com/training/multiscreen/…
  • 是的,确实如此,但我需要它是一个特定的大小,因为它是一个网格,应用程序的各个部分位于 6 个不同的部分中。所以我不能改变图像的大小。还有什么我可以尝试的吗?
  • 只要将图片设置为全屏,android就会选择最佳分辨率,其中xxxhdpi只用于平板电脑。使用 XML 布局而不是图像创建网格不是更好吗?例如。 linearlayout 可以使用 layout_weight 轻松做到这一点
  • @Betware 谢谢。我不能使用布局,因为图像更美观。有没有其他方法可以让图片的内存打印更小?
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 2022-01-10
  • 2020-02-15
  • 1970-01-01
  • 2013-11-30
  • 2015-07-20
相关资源
最近更新 更多