我有一个应用程序通过将所有帧作为单独的位图加载到内存中并使用线程循环将它们分配给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模拟器或我的galaxy tab 10.1上运行4.0.4 - 这两个运行正常并且相当快。
我已经尝试加载1024x999 3.2MB gif,甚至4.0.3模拟器也失败了,但我的平板电脑仍设法显示多个GIF,直到它也停止加载它们;该应用程序使用了大约250-300MB的RAM。
那么有没有办法预测真实设备的运作方式?我应该定位更高版本的API吗?
答案 0 :(得分:1)
加载这么多位图时你必须非常小心。您可以轻松超过所需的内存量。 请记住,您使用的是有限的设备,不要期望无限的资源尽可能地提高内存效率。
如果你从android开发网站了解最佳实践,你很可能会解决你的问题:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
给它一个阅读,应该可以帮助你解决问题。