【问题标题】:Android MVVM App Architecture: How to set up FirebaseFirestore as RepositoryAndroid MVVM 应用架构:如何将 FirebaseFirestore 设置为存储库
【发布时间】:2018-11-05 07:37:50
【问题描述】:

我想使用new architecture components 创建一个应用程序,并且我已经设置了视图和 ViewModel。目前,我的应用程序在 ViewModel 中执行所有 Firestore 查询,并且在某种程度上可以正常工作。 Google recommends 您应该提供一个存储库来缓存一些数据并决定是否获取新数据。这对我的应用程序来说非常有意义,因为在我的 MainActivity 和许多其他活动中嵌套了几个片段。

我决定实现存储库并为我的存储库创建了一个 Kotlin 对象(单例)。结果,我收到警告说我不应该在其中存储 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 快照监听器实现存储库的有效方法吗?

【问题讨论】:

  • 你有答案吗?有参考吗?
  • @ShivarajPatil 我已经根据我的经验回答了这个问题

标签: android firebase mvvm


【解决方案1】:

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

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

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

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


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    相关资源
    最近更新 更多