【发布时间】:2017-11-06 19:08:15
【问题描述】:
我有一个 Activity、ViewModel、Singleton 存储库和 Room。
在活动的OnCreate 中,我创建了 ViewModel:
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
viewModel.myData.observe(this, Observer { data ->
Log.d("livedata","triggred")
})
主视图模型:
class MyWorkoutViewModel (application: Application) : AndroidViewModel(application) {
// Getting the singleton repository
private var repository = (application as MyApp).repository
val myData: LiveData<Int> by lazy {
repository.getData()
}
}
Repository 有这个功能:
fun getData(): LiveData<Int> {
return LiveDataReactiveStreams.fromPublisher(database.myDao()
.observeData())
}
我的道:
@Query("SELECT COUNT(*) FROM my_table")
fun fetchData(): Flowable<Int>
我有一个非常奇怪的行为: 第一次创建活动时,数据被很好地获取并且一切正常。之后,我在 MainActivity 保持暂停时启动第二个活动。返回主活动后,LiveData 无明显原因再次触发。
我尝试将 LiveDataReactiveStream 切换为 database.myDao().observeData() 并在 Dao 中返回 LiveData 而不是 Flowable,它修复了当活动恢复时该额外触发器的奇怪行为。
但是我需要 use 或 rxjava 来进行更复杂的操作和线程。知道为什么会发生触发吗?
【问题讨论】:
-
你什么时候开始观察
LiveData?这可能与您调用liveData.observe(...)的时间和生命周期方法有关 -
@NikolaDespotoski 我开始在活动的“OnCreate”方法中观察
标签: android rx-java2 android-room android-architecture-components android-livedata