简书链接: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更新。