Picasso Android内存问题,当片段被替换时

时间:2016-12-27 07:39:17

标签: java android android-fragments picasso

我正在使用标签导航构建一个Android应用。 每个选项卡都有自己的后台堆栈,并在用户浏览应用程序时将片段堆叠到后台堆栈中。

问题在于,当我在片段之间导航时(使用FragmentTransaction的替换方法),用Picasso加载图像的imageView也保持其状态。这最终会导致OOM错误。

我希望在替换片段时释放图像的内存,并在重新访问时恢复状态。我正在考虑如何解决这个问题。

  1. 释放用于适配器的内存(ListAdapterFragmentAdapter,...) (大多数图像是这些适配器中的项目的呈现)
  2. 调用adapter.clear()清除片段的内容。
  3. 仅清除ImageViews'内容(如果可能..)
  4. 我甚至不确定它们是否存在实现这些功能的正确方法。 这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

嗨,我对.replace()方法,Picasso和内存泄漏的片段有相同的用户界面! 只需将Picasso替换为Glide,我的应用内存泄漏就会减少90%以上。

Glide on Github

比较:https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

你可以将片段传递给Glide而不是Context - Glide知道如何处理片段'生命周期。此外,请避免在类中创建活动变量 - 对活动的引用很可能会产生泄漏 - 更好地将活动或上下文作为参数传递给需要它的每个方法。

预防android中的内存泄漏(来自Google-engeneer):https://www.youtube.com/watch?v=_CruQY55HOk 希望它有所帮助!