需要帮助管理内存



我的应用程序的一个主要问题是崩溃,由于我的应用包含大量内容(它是一个内容共享网站客户端),这种情况经常发生。我有很多内存错误,我可以使用高达170-180MB的内存,这太荒谬了。

http://i.gyazo.com/6cd53e6cf6f0a9bfdd6a24b323a70b09.gifhttp://gyazo.com/b64d50f76b2ef608954a6d6cdd5d52d0

这些截图只是从加载25个提交并滚动它们。

我目前的设置是这样的:大小为的LruCache

(Runtime.getRuntime().maxMemory() / 1024) / 8

其处理所有提交图像。当我加载提交的照片或缩略图时,它会进入缓存。相册由位图的简单ArrayAdapter和WeakHashMap存储处理,因为它很少被调用(可能每25-30篇帖子中就有1篇包含相册)。Gifs通过GfyCat流式传输到VideoView,在Gifs或相册上不会发生真正的崩溃。真正的错误发生在我滚动时,这很奇怪,因为我一次将图像加载到LruCache中,以节省移动无线电时间(电池改进)。

问题似乎是安卓系统试图在LruCache中放入比它所能放入的更多的内容,因为我收到了这样的错误

java.lang.OutOfMemoryError: Failed to allocate a 3169972 byte allocation with 1400991 free bytes and 1368KB until OOM

尽管我的LruCache大小是24576kb。

我是否正确处理了内存?我可以采取哪些步骤来提高稳定性,同时保持应用程序的速度?谢谢

您甚至可以通过使用此配置来进一步增强picasso

Picasso.with(this)
.load(YOUR_URL)
.config(Bitmap.Config.RGB_565).fit()
.into((ImageView) findViewById(
R.id.frame_main_main_layout));

它将减少内存分配,使性能更好

我最终从Ion图像加载库切换到Picasso,并且通过自动缓存节省了33%的ram使用量,所以我去掉了LruCache和我所有的存储,现在它比以往任何时候都工作得更好!