Android MVVM应用程序架构:如何将FirebaseFirestore设置为存储库。

8
我想使用新的架构组件创建一个应用程序,我已经设置了视图和ViewModel。目前,我的应用程序在ViewModel中执行所有Firestore查询,并且在某种程度上可以工作。Google建议您提供一个存储一些数据并决定是否获取新数据的Repository。这对我的应用程序非常有意义,因为我有几个嵌套在MainActivity中的片段和许多其他活动。
我决定实现存储库并为我的存储库创建了一个Kotlin对象(Singleton)。结果,我收到警告,不应在其中存储FirebaseFirestore实例,因为它包含一个Context字段(我需要一个实例来分配snapshotListeners)。
Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)

我完全理解这个警告,但是我想知道如何在我的应用程序中使用Firebase实现存储库模式而不会造成内存泄漏的危险?由于Firebase和新的架构组件/指南都来自Google,我假设它们被设计为可以一起工作,但是在进行了一些研究之后,我无法弄清楚它们的工作方式。
有人知道使用Firebase快照监听器有效实现存储库的方法吗?

你有这个问题的答案吗?有任何参考资料吗? - Shivaraj Patil
@ShivarajPatil 我已经根据我所获得的经验回答了这个问题。 - Yannick
1个回答

0

我已经有一段时间没有问这个问题了。与此同时,我找到了一个很好的解决方法。最好的方法是利用存储库模式和依赖注入。 这意味着您需要一个带有私有字段firebaseFirestore的类,该类实现了定义所有数据库操作的接口(在我的情况下为RemoteRepository)。 该类本身通过依赖注入作为Singelton提供。

class FirebaseRepository : RemoteRepository {
   private val firebaseFirestore = FirebaseFirestore.getInstance()

   override suspend fun saveSomething(...) {
     ...
   }

   override suspend fun getSomething(id: String) : T {
     return ...
   }


}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接