即使活动发生更改后,如何使RxJava Observables正常工作?

时间:2018-10-29 16:34:31

标签: retrofit rx-java rx-java2 android-room rx-android

我正在使用Retrofit下载10个数据对象,并在Android应用程序中使用RxJava将其保存到Room中。我正在SplashActivity中进行此操作。在下载了至少一个对象之后,我将其保存到Room中,并想要打开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时App崩溃了。我认为是由于活动不再有效,但可以观察到的事实所致。我无法解决此问题。

我的第二个问题是使用disposables。据我了解(对RxJava不太了解),我必须在dispose方法中onDestroy()观察到。但是我不想处理,因为我希望该服务继续运行,直到完成所有对象的下载为止。

1 个答案:

答案 0 :(得分:0)

显然,我只需要使用Service并在service中运行我的工作,以便每当活动关闭时,service仍在运行。