繁体   English   中英

我是否需要将WeakReference用于循环依赖?

[英]Do I need to use a WeakReference for circular dependency?

我们在这里谈论Android 我们使用Model-View-Presenter方法对我们的架构进行了建模 ,我们遇到了关于弱引用的问题。

快速信息:

  • Presenter处理逻辑,网络呼叫等。
  • 视图句柄在屏幕上显示数据,显示加载条等。

Activity / Fragment类包含对演示者的引用。 演示者类包含对视图类的引用。

我们的视图 clases实际上是通常由Activity / Fragment实现的接口。 这意味着Activity/Fragment -> presenterpresenter -> view (an Activity/Fragment)之间的循环依赖关系。 出于这个原因,我们让presenterview (Activity/Fragment)弱引用

今天我们需要在同一个Activity使用2个视图 (以显示不同的模型数据),所以我们没有在Activityimplements它,而是创建了2个匿名类。 这导致presenter失去view的引用(因为它是一个弱引用)。

现在我们正在评估2个可能性:

  1. 我们并不需要presentersView上持有WeakReference ,因为这种类型的循环依赖不会泄漏内存。
  2. 我们不是使用匿名类,而是持有对Activity的引用(因此,演示者和活动都有对视图的引用) 只是为了它没有被释放 (感觉很臭)。

它是哪一个,我们是否需要演示者将视图作为弱引用?

答案是1 - 在这种情况下,您不需要演示者中的WeakReference。 我成功地使用了相同的模式。 没有内存泄漏 - 当活动获得GCed时,演示者会随之而来。 但是可能存在其他类型的问题 - 如果你保留在某个地方(例如在AsyncTask中)对引用者的硬引用。

正如Galya已经指出的那样, Presenter上不需要WeakReference ,因为它会在Activity被销毁时被销毁。 但如果我理解你的问题,你会尝试“修复”MVP模式。 也许VIPER模式可以帮到你?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM