如何在 activity 改变后让 RxJava Observables 工作?
How to let RxJava Observables work even after activity is changed?
我正在使用 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
。我想这是因为 activity 不再活跃但 observable 起作用了。我无法解决这个问题。
我的第二个问题是,使用 disposables
。据我所知(我对 RxJava 知之甚少),我必须在我的 onDestroy()
方法中 dispose
我的可观察对象。但我不想处理,因为我希望此服务保持 运行 直到它完成所有对象的下载。
显然,我只需要使用 Service
和 运行 我在服务中的工作,这样每当 activity 关闭时,服务仍然 运行ning。
我正在使用 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
。我想这是因为 activity 不再活跃但 observable 起作用了。我无法解决这个问题。
我的第二个问题是,使用 disposables
。据我所知(我对 RxJava 知之甚少),我必须在我的 onDestroy()
方法中 dispose
我的可观察对象。但我不想处理,因为我希望此服务保持 运行 直到它完成所有对象的下载。
显然,我只需要使用 Service
和 运行 我在服务中的工作,这样每当 activity 关闭时,服务仍然 运行ning。