Activity, ViewModel, Singleton 저장소 및 Room이 있습니다. activitiy의 OnCreate
에서 나는 뷰 모델을 만들 :방 - LiveData RxJava가 이유없이 트리거 됨
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
viewModel.myData.observe(this, Observer { data ->
Log.d("livedata","triggred")
})
MainViewModel :
fun getData(): LiveData<Int> {
return LiveDataReactiveStreams.fromPublisher(database.myDao()
.observeData())
}
MyDao :
@Query("SELECT COUNT(*) FROM my_table")
fun fetchData(): Flowable<Int>
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()
}
}
Respository이 기능이매우 이상한 행동이 있습니다 : 처음 활동을 만들면 데이터가 잘 추출되고 모든 것이 작동합니다. MainActivity가 일시 중지 된 상태에서 두 번째 활동을 시작합니다. 주 활동으로 돌아간 후 눈에 보이지 않는 이유로 LiveData가 다시 트리거됩니다.
난 그냥database.myDao().observeData()
대신
Flowable
의 다오에
LiveData
반환에
LiveDataReactiveStream
을 전환하는 노력과 활동이 재개 될 때 그 여분의 트리거의 이상한 행동을 고정.
그러나 더 복잡한 동작과 스레딩을 위해서는 use 나 rxjava가 필요합니다. 왜 그런 방아쇠가 생길지 모릅니다.
언제'LiveData'를 관찰하기 시작합니까? 이것은 아마도 liveData.observe (...)라고하는 라이프 사이클 메소드와 관련이 있습니다. –
@NikolaDespotoski 액티비티의 "OnCreate"메소드를 관찰하기 시작합니다 –