将参数WeakReference <view>传递给ViewModel的方法吗?

时间:2019-05-31 02:32:02

标签: android architecture android-viewmodel

我们的团队正在辩论是否应该将参数WeakReference<View>传递给ViewModel的方法。我在Google的文档中看到

  

注意:由于ViewModel的生存期超过了特定的活动和片段实例化,因此它绝不应引用View或任何可能包含对活动上下文的引用的类。如果ViewModel需要Application上下文(例如,查找系统服务),则可以扩展AndroidViewModel类,并具有一个在构造函数中接收Application的构造函数(因为Application类扩展了Context)。

如果我们使用WeakReference<View>将视图传递给viewmodel怎么样? WeakRef可以防止发生泄漏存储,但是一些成员表示,这将使读取/维护代码变得困难。有人建议使用ViewInf接口,而View将实现到ViewInf,并且在viewmodel中使用的方法将是这样。

    fun methodA(viewInf: WeakReference<ViewInf>)() {
        doSomeBackgroundThread(viewInf)
    }

我们要使用此视图绘制位图,并使用位图保存到内存缓存中。

1 个答案:

答案 0 :(得分:0)

Google的警告性注释很有意义,因为ViewModel除了传输数据外不做任何其他事情。

有时,我们被设计的“面向对象”部分所困扰,以至于忘记了域对象和应用程序基础结构对象只能交互以从应用程序中提取数据或将数据注入到应用程序中进行处理。