android - 使用 Android 上的架构组件将 RxJava 代码转换为新代码
问题描述
在 Kotlin Android 上使用 RxJava,我在做什么是 -
我有一个函数来创建我在 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
}
})
推荐阅读
- javascript - 使用不同的值更新状态不起作用
- javascript - addEventListner 函数里面的参数有什么作用?
- javascript - 如何在渲染之前计算 React 组件的大小?
- android - 如何解决清单中的持久 Unity(实际上是 Gradle)minsdk 错误
- django - 如何将 SSLCommerze 集成到我的 django 应用程序中?
- javascript - 用javascript更改css图片
- php - 有没有办法查询所有自定义帖子类型标签并返回每个标签?
- python - 从 POST 请求接收的 werkzeug.datastructures.ImmutableMultiDict 解码图像
- android - 任务“:app:mergeDexDebug”执行失败
- mysql - 我需要一个密钥来在 MySQL 中存储这种类型的 JSON 数据吗?