繁体   English   中英

observeForever 在 singleton object 中

[英]observeForever inside a singleton object

我正在 Kotlin 中编写我的第一个应用程序,并使用 Firebase 进行身份验证、数据库和存储。 我有 singleton object 来包装每个 Firebase 服务以减少耦合。 在我的身份验证 object 中,我将当前用户保存在 LiveData 中,以允许 ViewModels 引用它并允许 Fragments 观察它,并且效果很好。 我还想从数据库 object 中观察它,以允许它保持当前用户的 Firestore 文档加载。 我的 Firebase 对象不是生命周期感知的,所以observeForever是我的选择。 该函数的注释指出:“您应该手动调用 {@link #removeObserver(Observer)} 以停止观察此 LiveData。”,但我没有在 Kotlin 对象中找到任何“finalize”/“onCleanUp”/... 处理程序. 我应该担心吗(在我的情况下,我有点想永远观察)?

代码:

object Authentication {
    private val auth = FirebaseAuth.getInstance().apply {
        addAuthStateListener { _currentUser.value = currentUser }
    }

    private val _currentUser: MutableLiveData<FirebaseUser?> =
        MutableLiveData<FirebaseUser?>().apply { value = auth.currentUser }
    val currentUser: LiveData<FirebaseUser?> = _currentUser

...
}

object Database {
    init {
        Authentication.currentUser.observeForever { switchUserDocument(it) }
    }

...
}

谢谢::)

看起来您不需要从Singletone中删除观察者,您应该在您的案例中忽略 android lint。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM