私はActivity、ViewModel、SingletonリポジトリとRoomを持っています。ルーム - 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()
}
}
リポジトリーこの機能を持っている私はViewModelには、作成activitiyのOnCreate
で私は非常に奇妙な振る舞いを持っています: 初めてアクティビティが作成されると、データがうまくフェッチされ、すべてが機能します。その後、MainActivityは一時停止したままで2番目のアクティビティーを開始します。主なアクティビティに戻ると、目に見える理由がなくなり、LiveDataが再びトリガされます。
私はちょうどdatabase.myDao().observeData()
にLiveDataReactiveStream
を切り替えしようとしましたが、代わりにFlowable
のダオでLiveData
を返すと、活動が再開されたときには、その余分なトリガーの奇妙な行動を修正しました。
しかし、より複雑なアクションやスレッド化には、useまたはrxjavaが必要です。そのトリガーはなぜ起こりますか?
「LiveData」の観測はいつ始まりますか?これはおそらく、いつliveData.observe(...)と呼ばれるライフサイクルメソッドに関連していますか –
@NikolaDespotoskiアクティビティの "OnCreate"メソッドで監視を開始します –