【问题标题】:Android app memory limitsAndroid 应用内存限制
【发布时间】:2012-11-26 18:27:07
【问题描述】:

我有一个应用程序,它通过将所有帧作为单独的位图加载到内存中并通过线程循环将它们分配给imageViews 来为 gif 设置动画。

imageViews 位于片段上,片段加载在pageViewer 上。我已将页面查看器的屏幕外限制设置为 1,因此我最多一次处理三个片段/gif。

现在在 2.1 的模拟器上,如果所有三个 gif 同时在内存中,我会收到此错误:

11-25 17:28:34.269: E/dalvikvm-heap(524): 292000-byte external allocation too large for this process.
11-25 17:28:34.269: E/(524): VM won't let us allocate 292000 bytes

我在 2.3.3 上遇到了同样的错误,但在 4.0.3 模拟器或运行 4.0.4 的我的 Galaxy Tab 10.1 上却没有——这两个运行良好且速度相当快。

我尝试加载 1024x999 3.2MB 的 gif,甚至 4.0.3 模拟器都失败了,但我的平板电脑仍然能够显示一些 gif,直到它也停止加载它们;该应用程序使用了大约 250-300MB 的 RAM。

那么有没有办法预测真实设备的工作方式?我应该定位更高的 API 版本吗?

【问题讨论】:

  • 这些 gif 是从网上加载的,还是您提供的?如果它们是资源,则应改用动画。最近有人问这个问题:stackoverflow.com/questions/12977039/…
  • 另请注意,每个应用程序的限制远小于设备的内存。
  • "该应用使用了大约 250-300MB 的 RAM。"这太过分了。 stackoverflow.com/questions/2630158/… 有些设备总容量甚至没有 250MB
  • GIF 被下载,250-300MB 的使用量也是一个边缘情况。

标签: android memory graphics bitmap


【解决方案1】:

加载这么多位图时必须非常小心。您可以轻松超过所需的内存量。 记住,您使用的是有限的设备,不要期望无限的资源尽可能地提高内存效率。

如果您从 android 开发网站了解最佳实践,您很有可能会解决您的问题:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

阅读一下,应该可以帮助您解决问题。

【讨论】:

  • 肯定有一些方法可以抑制内存使用,我打算这样做,但我担心的是缺乏一致性。一旦用户转到下一个片段,我花了一些时间试图破坏 gif,因为我假设我超过了应用程序内存限制,然后我在我的真实设备上尝试了它,发现它不需要它并且应用程序限制不知何故不是触发。
猜你喜欢
  • 2015-03-07
  • 2011-05-28
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 2018-11-03
  • 2013-01-10
  • 2017-10-07
  • 2017-02-18
相关资源
最近更新 更多