【问题标题】:Need Help Managing Memory需要帮助管理内存
【发布时间】: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。

我是否正确处理内存?我可以采取哪些步骤来提高稳定性但保持应用程序快速运行? 谢谢!

【问题讨论】:

  • 加载位图时是否缩放?

标签: android memory bitmap


【解决方案1】:

您甚至可以使用此配置进一步增强毕加索

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

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

【讨论】:

  • 这到底是做什么的?看起来很有趣!
  • fit() 使毕加索只使用适合您的 ImageView 大小而不分配大图,例如,如果您将其用作缩略图,那么您将减少对大图的分配。跨度>
  • config(Bitmap.Config.RGB_565) 将位图的配置更改为 16 位而不是 32 位,它将增强您的内存并减少分配。试一试。
【解决方案2】:

我最终从 Ion 图像加载库切换到 Picasso,并通过自动缓存节省了 33% 的 ram 使用量,因此我摆脱了 LruCache 和我所有的商店,现在它比以往任何时候都运行得更好!

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2019-03-26
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多