Android 未观察到设置LiveData的某些多个并发调用
我有一个打网络电话的功能。它可以在同一时间被多次调用,每次调用都可以并发运行Android 未观察到设置LiveData的某些多个并发调用,android,kotlin,android-livedata,android-viewmodel,mutablelivedata,Android,Kotlin,Android Livedata,Android Viewmodel,Mutablelivedata,我有一个打网络电话的功能。它可以在同一时间被多次调用,每次调用都可以并发运行 getDataTask() // it is subscribed on the background thread and observed on the main thread .subscribe( { result -> onResult(result) }, { onError() } ) .addToDisposables() 我能够检索数据,
getDataTask() // it is subscribed on the background thread and observed on the main thread
.subscribe(
{ result -> onResult(result) },
{ onError() }
)
.addToDisposables()
我能够检索数据,没有任何问题onResult
函数将ViewModel
中的MutableLiveData
字段更新为
private val _data = MutableLiveData<Data>()
val data: LiveData<Data> get() = _data
private fun onResult(result: Data) = _data.post(result)
当背对背并发调用成功并尝试更新
\u data
字段时,我注意到观察者没有观察到一些结果。例如,有4个并发调用同时启动,然后它们尝试发布结果,但有1或2个结果未被观察到。我如何解决这个问题?任何帮助都将不胜感激。我认为这个问题是由于LiveData的性质造成的LiveData
作为一个可观察的视图持有者
只会发出它处理的最后一个值
现在我知道你在同时打电话,这没什么错。如果您想在网络中节省执行时间,那么这是一个不错的选择。但是,如果您希望此并发性与您的LiveData
实例一起工作,并且希望您的LiveData
在并发方法成功返回后立即发出它处理的每个值,那么您可能使用的LiveData
是错误的
您正在寻找的是LiveData的可观察性
。您可以免费获得与之捆绑在一起的生命周期感知
部件,但它不是您常规的可观察的
,而是只保留最后一个值的特殊部件
在您想要处理每一个值的情况下,最好使用RxJava的Observable
。您还可以通过在您的活动或片段中订阅和取消订阅
来了解it生命周期。在
中有这么多操作符,其中一个肯定会对您有所帮助,我认为是
和
您确定在viewModel中观察到了所有结果吗。我的意思是,可能很快就会有结果。LiveData作为一个可观察的ViewHolder,只需传递最新的值。尝试创建一个容器来记录来自可观察对象的所有值。在我看来,这类似于将LiveData视为可观察对象的情况。我只需要通过LiveData字段将结果传递给view。每个结果对应于将在Recyclerview行中设置的一组数据。请加入聊天,以便我能了解更多。谢谢你是不是真的把你的LiveData
和MutableLiveData
\u data
都命名了,或者这是打字错误?而且\u data.post
应该是\u data.postValue
?
viewModel.data.observe(viewLifecycleOwner, Observer { data -> // DO SOMETHING })