首页 文章

Android从ViewModel调用View Controller方法

提问于
浏览
0

我开始玩Android JetPack(ViewModel,Architecture Components,LIfeCycle等) . 直到现在,我正在使用Model View Presenter架构,实际上我发现它很容易测试和维护架构 .

另一方面,我可以通过使用ViewModels看到的最大优势是它们与活动和碎片生命周期的本地耦合,这一直是Android开发人员最大的痛苦之一,因此我认为这是一个非常大的进步 .

说,我认为有一个很大的缺点:使用这种新方法,调用Activity或Fragment的方法似乎更棘手,因为正如官方文档中所述

ViewModel绝不能引用视图,生命周期或任何可能包含对活动上下文的引用的类 .

在MVP方法中,Presenter与视图签订了 Contract ,并可以调用其所有方法 . 我对如何使用Architecture组件解决这个问题进行了一些研究,但似乎没有简单而轻松的方法:最后,您总是必须处理ViewModel中的状态并对活动和碎片中的这些更改做出反应 . 有人建议使用SingleLiveEvent类,这使它更容易一些,但仍然比以前更痛苦 .

所以我的问题是:

文档说你不能引用任何持有对Activity Activity的引用的东西(为了避免内存泄漏),但是如果我这样做然后我清除了ViewModel的onCleared()中的所有引用呢?

1 回答

  • 0

    你不会避免内存泄漏,因为例如如果你旋转你的设备你的_13769将被销毁,然后重新创建,但 VM 将保持不变,并且它的 onCleared 将不会被调用(因此你的旧活动仍然保留在内存中,因为你的 VM 仍然引用它) .

    一般来说,MVVM在概念上说, ViewModels 不应该知道 View ,这是 architecture 的美丽:没有更好的模式,只是更合适的模式,你应该选择一个更适合你的模式 .

相关问题