У меня есть Activity, ViewModel, репозиторий Singleton и Room. В Activity OnCreate
я создаю ViewModel:
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
viewModel.myData.observe(this, Observer { data ->
Log.d("livedata","triggred")
})
MainViewModel:
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())
}
MyDao:
@Query("SELECT COUNT(*) FROM my_table")
fun fetchData(): Flowable<Int>
У меня очень странное поведение: в первый раз, когда действие создается, данные извлекаются нормально, и все работает. После этого я запускаю вторую активность, пока MainActivity остается приостановленной. После возврата к основному действию без видимой причины LiveData запускается снова.
Я попытался переключить LiveDataReactiveStream
на database.myDao().observeData()
и вернуть LiveData
в Dao вместо Flowable
, и это исправило странное поведение этого дополнительного триггера при возобновлении активности.
Однако мне нужно использовать или rxjava для более сложных действий и потоковой передачи. Есть идеи, почему срабатывает этот триггер?
LiveData
? Вероятно, это связано с тем, когда и в каком методе жизненного цикла вы вызываетеliveData.observe(...)
- person Nikola Despotoski   schedule 10.11.2017