Android应用程序内存限制

Android应用程序内存限制,android,memory,graphics,bitmap,Android,Memory,Graphics,Bitmap,我有一个应用程序,通过将所有帧作为单独的位图加载到内存中,并通过线程循环将它们分配给图像视图来设置gif的动画 imageview位于片段上,片段加载在pageViewer上。我已经将pageviewer的屏幕外限制设置为1,因此一次最多只能处理三个片段/GIF 现在,在emulator with 2.1上,如果三个GIF同时在内存中,我会遇到此错误: 11-25 17:28:34.269: E/dalvikvm-heap(524): 292000-byte external allocatio

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

imageview
位于片段上,片段加载在
pageViewer
上。我已经将pageviewer的屏幕外限制设置为1,因此一次最多只能处理三个片段/GIF

现在,在emulator with 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 emulator或运行4.0.4的galaxy tab 10.1上没有遇到同样的错误-这两个版本运行得很好,速度也快得多


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


那么,有没有一种方法可以预测真正的设备将如何工作?我应该瞄准更高的API版本吗?

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

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


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

这些GIF是从web加载的,还是由您提供的?如果它们是资源,则应该使用动画。最近有人问:还要注意,每个应用程序的内存限制远小于设备的内存。“该应用程序使用了大约250-300MB的内存。”这太多了。有些设备的总容量甚至不到250MB。GIF被下载,250-300MB的使用也是一种边缘情况。我肯定有一些方法可以限制内存使用,我计划这样做,但我担心的是缺乏一致性。我花了一些时间试图在用户转到下一个片段时销毁gif,因为我假设我超过了应用程序内存限制,然后我在我的真实设备上尝试了它,发现它不需要,并且应用程序限制不知何故没有触发。