使用Live Data作为参数和使用return有区别吗?

问题描述 投票:0回答:1

我在 ViewModel 中创建函数以避免在使用 Flow 和 LiveData 时重复。在示例中,我创建了一个扩展函数,如下所示。在和朋友聊天的时候,我们开始思考把它作为参数使用和通过返回来使用的区别,但是我没有找到太多相关信息。哪种方法是正确的?

inline fun <reified T> FirebaseRemoteConfig.fetchToLiveData(
    key: String,
    gson: Gson,
    liveData: MutableLiveData<T>
) {
    this.fetchAndActivate().addOnCompleteListener {
        if (it.isSuccessful) {
            val keyString = this.getString(key)
            val type = object : TypeToken<T>() {}.type
            val jsonModel = gson.fromJson<T>(keyString, type)
            liveData.postValue(jsonModel)
        }
    }
}
inline fun <reified T> FirebaseRemoteConfig.fetchToLiveData(
     key: String,
     gson: gson
): LiveData<T> {
     val liveData = MutableLiveData<T>()
     this.fetchAndActivate().addOnCompleteListener {
         if (it.isSuccessful) {
             val keyString = this.getString(key)
             val type = object : TypeToken<T>() {}.type
             val jsonModel = gson.fromJson<T>(keyString, type)
             liveData.postValue(jsonModel)
         }
     }
     return liveData
}
android kotlin android-livedata kotlin-flow
1个回答
0
投票

如果您多次调用该函数以更改正在观察的 LiveData 的发布值,则第一种方法很有意义。但如果你不是,那就很复杂了。

第二种方式看起来不错……

除非您可以通过使用

liveData { }
协程构建器和
await()
调用而不是侦听器来改善内存使用。这将使 API 调用可取消,并在 ViewModel 超出范围时自动取消。对于第一种方法,这是不可行的,您可能想要启动一个协程并在其中使用 await 来更新实时数据。

© www.soinside.com 2019 - 2024. All rights reserved.