我正在使用标签导航构建一个Android应用。 每个选项卡都有自己的后台堆栈,并在用户浏览应用程序时将片段堆叠到后台堆栈中。
问题在于,当我在片段之间导航时(使用FragmentTransaction
的替换方法),用Picasso加载图像的imageView
也保持其状态。这最终会导致OOM错误。
我希望在替换片段时释放图像的内存,并在重新访问时恢复状态。我正在考虑如何解决这个问题。
ListAdapter
,FragmentAdapter
,...)
(大多数图像是这些适配器中的项目的呈现)adapter.clear()
清除片段的内容。ImageViews
'内容(如果可能..)我甚至不确定它们是否存在实现这些功能的正确方法。 这样做的正确方法是什么?
答案 0 :(得分:1)
嗨,我对.replace()
方法,Picasso
和内存泄漏的片段有相同的用户界面!
只需将Picasso
替换为Glide
,我的应用内存泄漏就会减少90%以上。
比较: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 希望它有所帮助!