网络回调的弱参考是个坏主意?

Weak Reference for Network callback bad idea?

在我们的项目中,我们发现了由于网络回调导致的内存泄漏。网络请求从片段中触发,响应通过片段回调返回。问题是,当用户离开片段时,它不会被垃圾收集,因为回调与它相关联。因此存在内存泄漏。

我提出的解决方案是取消片段 onStop 上的回调引用。这样,GC 就可以处理它。

我的同事建议的另一个解决方案是对回调使用 Wea​​kReference。问题是回调经常被垃圾收集,以至于我们甚至得不到回调的响应(有时用户正在等待响应)。问题是弱引用可以随时使用 GC 进行垃圾回收。

我假设在这种情况下,使用 Wea​​kReference 不是一个好主意。

大家怎么看?

我认为您应该对外部 class 使用弱引用,而不是回调。 真正泄漏的不是回调,而是外部 class 。 这意味着,你使用的回调不是应该被收集的那个回调。

有问题请回复我:)

我认为回调监听器的 WeakReference 不是一个好的模式,因为你的回调监听器很容易被 GC 然后导致你的回调永远不会被调用。 但是我完全同意@MacFang 的回答 It's not the callback really leak but the outer class.

同意这两个答案。感谢您花时间回答。

解决方案是将 "fragment" 包装在弱引用中而不是回调中,这样当网络操作完成时,我会检查片段是否仍然存在。 GC 将在片段不存在时对其进行垃圾回收。