【问题标题】:How to let RxJava Observables work even after activity is changed?即使在活动更改后如何让 RxJava Observables 工作?
【发布时间】:2019-04-02 15:37:08
【问题描述】:

我正在使用 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 时崩溃。我想这是因为活动不再活跃但可观察到的事实正在发挥作用。我无法解决这个问题。

我的第二个问题是,使用disposables。据我所知(我对 RxJava 知之甚少),我必须在我的 onDestroy() 方法中 dispose 我的 observables。但我不想处理,因为我希望此服务继续运行,直到它完成所有对象的下载。

【问题讨论】:

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


    【解决方案1】:

    显然,我只需要使用Service 并在服务中运行我的工作,这样每当活动关闭时,服务仍在运行。

    【讨论】:

      猜你喜欢
      • 2013-11-11
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 2015-05-16
      相关资源
      最近更新 更多