【问题标题】:Android: "java-lang-outofmemoryerror-bitmap-size-exceeds-vm-budget-android" While loading bitmaps from sdcard?Android:“java-lang-outofmemoryerror-bitmap-size-exceeds-vm-budget-android”从 sdcard 加载位图时?
【发布时间】:2011-02-14 09:53:59
【问题描述】:

在我的应用程序中,我必须使用 500x500 像素的小图像显示大约 10000 x 5000 的图像。即;通过平铺图像。 为了将所有图像平铺到一个,最初我从 sdcard 收集所有位图以便在画布上绘制。

但是,当我使用 BitmapFactory.decodeFile(path) 从外部存储加载图像时,我遇到了错误 java-lang-outofmemoryerror-bitmap-size-exceeds-vm-budget-android

任何人都可以如何避免此错误并给我一个想法如何将大量图像平铺到单个图像中。

谢谢你, 斯里尼瓦斯

【问题讨论】:

标签: android memory-leaks bitmap


【解决方案1】:
  1. 永远不要加载任何不需要的图块。 “正在从 sdcard 收集所有位图”表明您正在解压缩您可能需要的每个图像,这是错误的方法。

  2. 使用较小的图块。 256x256 是一个不错的尺寸。

  3. 将它们加载为 Config.RGB565(即 16bpp)。

  4. 定期 recycle() 不需要的位图。

基本上,您需要实现某种最近使用 (MRU) 位图缓存。

【讨论】:

  • 但是你能简单介绍一下我到底需要做什么吗?实际上我需要将所有图像平铺到单个图像,如谷歌地图。缩放时我需要使用另一组基于缩放因子的图像。你能告诉我如何完成这项任务吗?我从来没有做过这种任务。
  • 解压后的位图占用很多内存。任何时候都应该只解压缩真正需要的
  • 正在创建自定义视图扩展视图类。在draw方法中,当视图水平和垂直滚动时如何更新新的位图。
  • 您基本上需要两组数据:一个用于整个数据集的图像网格,另一个是当前显示在视口中的图像网格。当用户滚动视图时,您更新第二个网格,然后重新渲染视图。
  • 好的,谢谢你 .. 我会尝试这样的。我对这种事情很陌生。但我需要帮助。
猜你喜欢
  • 2013-01-02
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2023-03-20
  • 1970-01-01
  • 2013-05-01
相关资源
最近更新 更多