在 Android 上使用架构组件将 RxJava 代码转换为新代码
Converting RxJava code to a new code using architecture components on Android
在 Kotlin 上使用 RxJava Android,我正在做的是 -
我有一个函数可以创建位图,我在 IO 线程中 运行。
位图准备就绪后,我将其设置为主线程上的 ImageView。
var observable : Observable<Bitmap> = Observable.just(makeBitmap(path))
var observer:Observer<Bitmap> = io.reactivex.Observer<Bitmap>() {
fun onSubscribe(d: Disposable) {
disposable = d
}
fun onNext(bitmap) {
imageView.setImageBitmap(bitmap)
}
fun onError(e:Throwable) {
}
fun onComplete() {
}
}
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer)
我的问题是,我们可以使用 LiveData 并通过观察架构组件中的数据来实现这样的目标吗?
基本上我想在主线程上观察一些东西,但是繁重的工作必须在一个单独的线程上完成。
嗯,你可以有这样的东西:
var bitmapLiveData: MutableLiveData<Bitmap> = MutableLiveData()
fun createBitmap(): LiveData<Bitmap> {
var observable : Observable<Bitmap> = Observable.just(makeBitmap(path))
val result = observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
result ->
bitmapLiveData.postValue(result)
},{
error->
error.printStackTrace()
},{
//completed
})
return bitmapLiveData
}
我把它放在一个 LifecycleOwner 可以观察到的视图模型中:
viewModel.createBitmap().observe(this, Observer {
it?.let {
//result bitmap
}
})
在 Kotlin 上使用 RxJava Android,我正在做的是 -
我有一个函数可以创建位图,我在 IO 线程中 运行。
位图准备就绪后,我将其设置为主线程上的 ImageView。
var observable : Observable<Bitmap> = Observable.just(makeBitmap(path))
var observer:Observer<Bitmap> = io.reactivex.Observer<Bitmap>() {
fun onSubscribe(d: Disposable) {
disposable = d
}
fun onNext(bitmap) {
imageView.setImageBitmap(bitmap)
}
fun onError(e:Throwable) {
}
fun onComplete() {
}
}
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer)
我的问题是,我们可以使用 LiveData 并通过观察架构组件中的数据来实现这样的目标吗?
基本上我想在主线程上观察一些东西,但是繁重的工作必须在一个单独的线程上完成。
嗯,你可以有这样的东西:
var bitmapLiveData: MutableLiveData<Bitmap> = MutableLiveData()
fun createBitmap(): LiveData<Bitmap> {
var observable : Observable<Bitmap> = Observable.just(makeBitmap(path))
val result = observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
result ->
bitmapLiveData.postValue(result)
},{
error->
error.printStackTrace()
},{
//completed
})
return bitmapLiveData
}
我把它放在一个 LifecycleOwner 可以观察到的视图模型中:
viewModel.createBitmap().observe(this, Observer {
it?.let {
//result bitmap
}
})