Android 完成适配器';s视图保持架一旦适配器不再使用

Android 完成适配器';s视图保持架一旦适配器不再使用,android,memory-leaks,android-recyclerview,Android,Memory Leaks,Android Recyclerview,考虑以下场景 片段(例如在滑动布局中用作页面)使用RecyclerView RecyclerView的适配器创建了视图持有者,这些视图持有者将自己注册为可观察对象上的观察者 可观察对象是共享应用程序生命周期而不是片段生命周期的单例 问题是,当片段停止时(我假设此时适配器的onDetachedFromRecyclerView被调用,并且它与recyclerview一起被垃圾收集),视图持有者将不会停止,因为可观察对象仍然引用它们,从而导致内存泄漏。我的问题是如何做到这一点 免责声明,以下段落是

考虑以下场景

  • 片段(例如在滑动布局中用作页面)使用RecyclerView

  • RecyclerView的适配器创建了视图持有者,这些视图持有者将自己注册为可观察对象上的观察者

  • 可观察对象是共享应用程序生命周期而不是片段生命周期的单例

问题是,当片段停止时(我假设此时适配器的
onDetachedFromRecyclerView
被调用,并且它与recyclerview一起被垃圾收集),视图持有者将不会停止,因为可观察对象仍然引用它们,从而导致内存泄漏。我的问题是如何做到这一点

免责声明,以下段落是我最初认为的解决方案,但失败了,我的问题不是如何使该解决方案起作用,因为这可能是一个XY问题

所以我需要找到一种方法从每个视图持有者调用
observable.deleteObserver(this)
。我假设我可以从回收服务视图的onDetachedFromRecyclerView中执行此操作。我遇到的问题是如何迭代所有视图持有者


很抱歉标题太乱,我不擅长命名:(

afaik
RecyclerView
不包含所有已创建视图持有者的列表:您必须自己执行此操作。为什么要将观察者附加到每个视图持有者?只需为适配器或片段指定一个观察者,并根据update()方法接收的数据更新列表即可。