Как позволить RxJava Observables работать даже после изменения активности? - PullRequest
0 голосов
/ 29 октября 2018

Я загружаю 10 объектов данных с помощью Retrofit и сохраняю их в Room с помощью RxJava в приложении для Android. Я делаю это в SplashActivity. После того, как загружен хотя бы один объект, я сохраняю его в комнате и хочу открыть HomeActivity и позволить загрузке оставшихся 9 объектов. Как я могу это сделать?

Вот как у меня дела

for (i in 1 until 10) {
            MyService().getObject(i, object : Callback<MyObject> {

                override fun onFailure(call: Call<MyObject>, t: Throwable) {
                    t.printStackTrace()
                }

                override fun onResponse(call: Call<MyObject>, response: Response<MyObject>) {
                    if (response.isSuccessful) {
                        val result = response.body()!!.data
                        Observable.fromCallable{
                            objectDao.insert(Object(result))}
                                .subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread())
                                .doOnComplete {if (i == 1) startHomeActivity()}
                                .subscribe()
                    }
                }
            })
        }

Теперь моя первая проблема: приложение падает при открытии HomeActivity. Я полагаю, что это происходит из-за того, что активность больше не активна, а наблюдаемая - работает. Я не могу это исправить.

Моя вторая проблема - использование disposables. Насколько я понял (с моим небольшим знанием RxJava), я должен dispose мои наблюдаемые в моем onDestroy() методе. Но я не хочу распоряжаться, так как я хочу, чтобы эта служба продолжала работать до тех пор, пока она не закончит загрузку всех объектов.

1 Ответ

0 голосов
/ 12 июля 2019

Очевидно, мне просто нужно было использовать Service и выполнять свою работу в рамках службы, чтобы при закрытии активности служба все еще работала.

...