首页 > 解决方案 > 使用 LiveData 的 emit 和 emitSource 有什么区别?(如实时用例)

问题描述

emit接受data类而emitSource接受LiveData<T>( T -> data)。考虑以下示例:-我有两种类型的调用:-

suspend fun getData(): Data // returns directly data

另一个;

suspend fun getData(): LiveData<Data> // returns live data instead

对于第一种情况,我可以使用:-

liveData {
   emit(LOADING)
   emit(getData())
}

我的问题:使用上述方法可以解决我的问题,为什么我们仍然需要emitSource(liveData)

使用该方法的任何好的用例emitSource都会清楚地说明!

标签: androidandroid-architecture-componentsandroid-livedataandroid-jetpackkotlin-coroutines

解决方案


正如您所提到的,我认为它不能解决您所说的问题中的任何问题,但我通常这样使用它:

如果我想在从远程获取新数据的同时从数据库向用户显示缓存数据,只发出它看起来像这样:

liveData{
    emit(db.getData())
    val latest = webService.getLatestData()
    db.insert(latest)
    emit(db.getData())
}

但是使用 emitSource 它看起来像这样:

liveData{
    emitSource(db.getData())
    val latest = webService.getLatestData()
    db.insert(latest)
}

由于 liveData 已经有源,因此不需要再次调用 emit。


推荐阅读