Объекты RxJava занимают слишком много времени для инициализации - PullRequest
0 голосов
/ 05 июля 2018

Я использую такую ​​конструкцию для обработки нескольких ответов на загрузку данных. Проблема в том, что этот код влияет на время начала фрагмента (+2 о секунде). Функция load() помещена в ViewModel. Fragment#onResume() вызов метода ViewModel#load() метод. Как я могу оптимизировать этот код, чтобы сократить время запуска Fragment?

fun load() {
    Single.zip(
            apiDataManager1.getSingle().subscribeOnIo().observeOnMain(),
            apiDataManager2.getSingle().subscribeOnIo().observeOnMain(),
            apiDataManager3.getSingle().subscribeOnIo().observeOnMain(),
            Function3<Any, Any, Any, Unit> { _, _, _ ->
             // process data
            }
        )
            .subscribeOnIo()
            .observeOnMain()
            .subscribe()
}

UPD

Если я оберну эту функцию в Thread {}, все будет нормально. Как я могу сделать это только с Rx?

1 Ответ

0 голосов
/ 06 июля 2018

попробуйте запустить цепочку с чем-то другим, укажите наблюдателя. не уверен, что он предназначен, но объединение данных в Function3, вероятно, не должно доставляться в основной поток:

  Single.defer(() -> Single.just(true))
            .observeOn(Schedulers.io())
            .flatMap( any -> Single.zip(
               apiDataManager1.getSingle().subscribeOnIo(),
               apiDataManager2.getSingle().subscribeOnIo(),
               apiDataManager3.getSingle().subscribeOnIo(), { _, _, _ ->
              // process data
               })).subscribeOnIo()
        .observeOnMain()
        .subscribe()
...