简书链接:androidrxjava文本改变切换后台执行耗时处理完毕再返回
文章字数:165,阅读全文大约需要1分钟

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
RxTextView.textChanges(getBinding().ev)
//限流时间500ms
.debounce(500, TimeUnit.MILLISECONDS)

.observeOn(Schedulers.io())
//CharSequence转换为String
.flatMap(new Function<CharSequence, ObservableSource<Bitmap>>() {
@Override
public ObservableSource<Bitmap> apply(CharSequence charSequence) throws Throwable {
PrintLabelModel model = ScriptEngine.script2printLabelModel(charSequence.toString());
Bitmap bitmap = ModelPrintUtil.genereateBitmap(model);
// 在后台线程中执行耗时任务并返回Bitmap
return Observable.just(bitmap);
}
})
.observeOn(AndroidSchedulers.mainThread())
.to(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this))).subscribe(new Consumer<Bitmap>() {
@Override
public void accept(Bitmap o) throws Throwable {

}
});

在上面的代码中,observeOn(Schedulers.io())将让下游的flatMap操作符在IO线程上执行。在这里,您可以使用generateBitmap()方法执行任何耗时的任务,例如从网络下载图片或执行某些计算。一旦您生成了Bitmap,您可以使用Observable.just(bitmap)将其发送回主线程。

最后,observeOn(AndroidSchedulers.mainThread())将使下游操作符在主线程上执行,以便您可以使用生成的Bitmap执行任何UI更新。