【发布时间】: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