[英]Do I need to use a WeakReference for circular dependency?
我们在这里谈论Android 。 我们使用Model-View-Presenter方法对我们的架构进行了建模 ,我们遇到了关于弱引用的问题。
快速信息:
Activity / Fragment类包含对演示者的引用。 演示者类包含对视图类的引用。
我们的视图 clases实际上是通常由Activity / Fragment实现的接口。 这意味着Activity/Fragment -> presenter
和presenter -> view (an Activity/Fragment)
之间的循环依赖关系。 出于这个原因,我们让presenter
对view (Activity/Fragment)
了弱引用 。
今天我们需要在同一个Activity
使用2个视图 (以显示不同的模型数据),所以我们没有在Activity
上implements
它,而是创建了2个匿名类。 这导致presenter
失去view
的引用(因为它是一个弱引用)。
现在我们正在评估2个可能性:
presenters
在View
上持有WeakReference
,因为这种类型的循环依赖不会泄漏内存。 Activity
的引用(因此,演示者和活动都有对视图的引用) 只是为了它没有被释放 (感觉很臭)。 它是哪一个,我们是否需要演示者将视图作为弱引用?
答案是1 - 在这种情况下,您不需要演示者中的WeakReference。 我成功地使用了相同的模式。 没有内存泄漏 - 当活动获得GCed时,演示者会随之而来。 但是可能存在其他类型的问题 - 如果你保留在某个地方(例如在AsyncTask中)对引用者的硬引用。
正如Galya已经指出的那样, Presenter
上不需要WeakReference
,因为它会在Activity
被销毁时被销毁。 但如果我理解你的问题,你会尝试“修复”MVP模式。 也许VIPER模式可以帮到你?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.