我们在这里谈论 Android 。我们使用模型 - 视图 - 演示者方法对我们的架构进行了建模,我们遇到了关于弱引用的问题。
快速信息:
活动/片段类包含对演示者的引用。 演示者类包含对视图类的引用。
我们的视图条款实际上是通常由活动/片段实现的接口。这意味着Activity/Fragment -> presenter
和presenter -> view (an Activity/Fragment)
之间存在循环依赖关系。出于这个原因,我们将presenter
保持弱引用到view (Activity/Fragment)
。
今天我们需要在同一Activity
中使用2个观看次数(以显示不同的模型数据),因此我们在implements
Activity
{ {1}}但创建了2个匿名类。这最终导致presenter
失去了view
的引用(因为它是一个弱引用)。
现在我们正在评估2个可能性:
presenters
在WeakReference
上持有View
,因为这种类型的循环依赖会导致内存泄漏。Activity
进行引用(因此,演示者和活动都有对视图的引用)只是为了没有取消分配(其中感觉很臭。它是哪一个,我们是否需要演示者将视图作为弱引用?
答案 0 :(得分:2)
答案是1 - 在这种情况下,您不需要演示者中的WeakReference。我成功地使用了相同的模式。没有内存泄漏 - 当活动获得GCed时,演示者会随之而来。但是可能存在其他类型的问题 - 如果你保留在某个地方(例如在AsyncTask中)对引用者的硬引用。
答案 1 :(得分:2)
正如Galya已经指出的那样,WeakReference
上不需要Presenter
因为Activity
被销毁时会被销毁。但如果我理解你的问题,你会尝试修复" MVP模式。也许VIPER模式可以帮到你?