【发布时间】:2015-04-22 20:03:51
【问题描述】:
我的应用程序的一个主要问题是崩溃,由于我的应用程序包含大量内容(它是一个内容共享站点客户端),这种情况经常发生。我遇到很多内存错误,我最多可以使用 170-180 MB 的内存,这太荒谬了。
http://i.gyazo.com/6cd53e6cf6f0a9bfdd6a24b323a70b09.gifhttp://gyazo.com/b64d50f76b2ef608954a6d6cdd5d52d0
这些屏幕截图来自加载 25 个提交并滚动浏览它们。
我目前的设置是这样的:LruCache 大小为
(Runtime.getRuntime().maxMemory() / 1024) / 8
处理所有提交图像。当我加载提交照片或缩略图时,它会进入该缓存。相册由用于位图的简单 ArrayAdapter 和 WeakHashMap 存储处理,因为它很少被调用(可能每 25-30 个帖子中就有 1 个包含相册)。 GIF 通过 GfyCat 流式传输到 VideoView,GIF 或相册上不会发生真正的崩溃。真正的错误发生在我滚动时,这很奇怪,因为我一次将图像全部加载到 LruCache 以节省移动无线电时间(电池改进)。
问题似乎是 android 试图在 LruCache 中放入更多的东西,因为我遇到了这样的错误
java.lang.OutOfMemoryError: Failed to allocate a 3169972 byte allocation with 1400991 free bytes and 1368KB until OOM
即使我的 LruCache 大小是 24576kb。
我是否正确处理内存?我可以采取哪些步骤来提高稳定性但保持应用程序快速运行? 谢谢!
【问题讨论】:
-
加载位图时是否缩放?