【发布时间】:2019-05-31 02:32:01
【问题描述】:
我们的团队正在讨论是否应该将参数WeakReference<View> 传递给ViewModel 的方法。我在google的文档中看到说
注意:由于 ViewModel 比特定 Activity 和 Fragment 实例的寿命更长,因此它不应该引用 View 或任何可能持有对 Activity 上下文的引用的类。如果 ViewModel 需要 Application 上下文(例如,寻找系统服务),它可以扩展 AndroidViewModel 类,并在构造函数中有一个接收 Application 的构造函数(因为 Application 类扩展了 Context)。
如果我们使用 WeakReference<View> 将视图传递给 viewmodel 怎么样? WeakRef 可以防止内存泄漏的发生,但是一些成员表示它会使阅读/维护代码变得困难。有些人建议使用接口 ViewInf 和 View 将实现到 ViewInf 和 viewmodel 中的方法使用将是这样的。
fun methodA(viewInf: WeakReference<ViewInf>)() {
doSomeBackgroundThread(viewInf)
}
我们想用这个视图在位图上绘制,并用位图保存到内存缓存中。
【问题讨论】:
-
不要那样做。它将打破依赖和责任规则。 View 自己负责绘制位图。
标签: android architecture android-viewmodel