android - 需要帮助管理内存

标签 android memory bitmap

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

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

这些屏幕截图来自于加载 25 个提交并滚动浏览它们。

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

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

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

问题似乎是 android 试图将更多的东西放入 LruCache 中,因为我得到了这样的错误

java.lang.OutOfMemoryError:无法分配 3169972 字节的分配,其中 1400991 个可用字节和 1368KB 直到 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));

它会减少分配内存并提高性能

关于android - 需要帮助管理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29759704/

相关文章:

android - TransformException:DoubleMetaphone.class Gradle错误的重复条目

android - 在Android模拟器上使用录音机

java - 位图压缩如何在 android 中工作?

java - 调色板颜色缓存的单例实例

java - 按下后退按钮时如何获取最后使用的 Fragment

android - 在android和pc之间通过tcp发送文件

c - 移动数据 block ——memcpy 还是 memmove?

c++指针的内存分配 vector

java - 观察递归期间创建的内部堆栈上的值

Android - 如何加载大图像(将其转换为较小的尺寸)并将其作为 Base64 字节数组发送(避免 OutOfMemory 错误)