0

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

位于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 版本吗?

4

1 回答 1

1

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

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

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

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

于 2012-11-26T18:38:13.647 回答