传递参数弱引用<View>视图模型的方法?



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

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

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

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

我们希望使用此视图在位图上绘制,并使用位图保存到memcache中。

谷歌的警告是有道理的,因为ViewModel除了传输数据之外不应该做任何其他事情。

有时,我们太沉迷于设计的"面向对象"部分,以至于忘记了域对象和应用程序基础结构对象应该只交互以从应用程序中提取数据或将数据注入应用程序进行处理。

最新更新