作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 new architecture components 创建一个应用程序我已经设置了 View 和 ViewModel。目前,我的应用程序在 ViewModel 中执行所有 Firestore 查询,并且在某种程度上可以正常工作。 Google recommends您应该提供一个存储库来缓存一些数据并决定是否获取新数据。这对我的应用程序来说非常有意义,因为在我的 MainActivity 和许多其他 Activity 中嵌套了几个 fragment 。
我决定实现存储库并为我的存储库创建了一个 Kotlin 对象(单例)。结果,我收到警告说我不应该在其中存储 FirebaseFirestore 实例,因为它包含一个 Context 字段(我需要一个实例来分配快照监听器)。
Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)
最佳答案
我已经有一段时间没有问这个问题了。同时,我找到了解决这个问题的好方法。最好的方法是利用存储库模式和依赖注入(inject)。
这意味着您有一个带有私有(private)字段的类(class) firebaseFirestore
它实现了一个定义所有数据库操作的接口(interface)(在我的例子中是 RemoteRepository
)。
类本身是通过依赖注入(inject)作为 Singelton 提供的。
class FirebaseRepository : RemoteRepository {
private val firebaseFirestore = FirebaseFirestore.getInstance()
override suspend fun saveSomething(...) {
...
}
override suspend fun getSomething(id: String) : T {
return ...
}
}
关于Android MVVM 应用架构 : How to set up FirebaseFirestore as Repository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50537071/
我是一名优秀的程序员,十分优秀!