我有一个 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()
}
}
存储库具有此功能:
fun getData(): LiveData<Int> {
return LiveDataReactiveStreams.fromPublisher(database.myDao()
.observeData())
}
我的道:
@Query("SELECT COUNT(*) FROM my_table")
fun fetchData(): Flowable<Int>
我有一个非常奇怪的行为:第一次创建活动时,数据被很好地获取并且一切正常。之后,我在 MainActivity 保持暂停时启动第二个活动。返回主活动后,LiveData 再次被触发,没有明显的原因。
我试图切换LiveDataReactiveStream
到 justdatabase.myDao().observeData()
并LiveData
在 Dao 中返回而不是Flowable
它修复了当活动恢复时该额外触发器的奇怪行为。
但是我需要使用或 rxjava 来进行更复杂的操作和线程。知道为什么会发生触发吗?