如何同步和异步运行相同的功能

时间:2019-06-24 15:11:00

标签: rx-java2 android-room android-viewmodel android-mvvm

我在Android应用程序中使用RoomRxJava2。我有一种情况,我希望同一函数在某个时刻运行synchronously而在其他地方运行asynchronously。下面是函数:

@Query("SELECT * from saved_survey WHERE enumeratorId = :enumeratorId and isDeleted=:isDeleted ORDER BY savedSurveyTime  DESC")
    fun getSavedSurveyList(enumeratorId: String, isDeleted: Boolean): Flowable<List<SavedSurvey>>

我想从IntentService调用时同步运行此函数,而从UI线程调用时异步运行。我将此函数称为:

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe()

我不想在repositoryviewmodel中使用多个功能。任何有效的方法将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。相同的功能可用于同步和异步。 RxJava2提供了这两种行为。

异步

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false)
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe()

同步

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false).blockingSubscribe()

savedSurveyViewModel.getSavedSurveyList(enumeratorId, false).blockingSingle()

谢谢。