我有一个应用程序,它通过将所有帧作为单独的位图加载到内存中并让线程循环将它们分配给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 版本为目标吗?
加载这么多位图时必须非常小心。您可以轻松地超过所需的内存量。请记住,您使用的是有限的设备,不要指望无限的资源尽可能提高内存效率。
如果您从 android 开发站点了解最佳实践,您很可能会解决您的问题:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
读一读,应该可以帮助你解决问题。