BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #30485同步于 2016/5/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

闲扯点 RxAndroid

axpq110
2016/5/16镜像同步12 回复
最近了解了点 RxAndroid 库,响应式什么的不太懂没太有感觉,但是常用感觉很顺手的点有: 1. 异步控制,可以控制代码块执行的线程 2. 流式结构,有点像传送带加工,把操作串一大串 常见基于回调的异步操作如下: asyncGetData(input, new Callback<Data>() { public void onCall(Data data) { data2ui(data); } }); 现有需求:根据 id 去请求服务器是否需要更新数据,需要则更新 checkIsNeedUpdateData(id, new Callback<Boolean>() { public void onCall(Boolean isNeed) { if (!isNeed) { return; } updateData(id, new Callback<Data>() { public void onCall(Data data) { data2ui(data); } }); } }); 逻辑越深,嵌套越深,就是传说中的回调地狱 RxAndroid 的做法: Observable.just(id) .subscribeOn(Schedulers.newThread()) // 后续操作在新线程 .filter(new Func1<Integer, Boolean>() { // 过滤操作,返回为 true 时继续后续操作 @Override public Boolean call(Integer id) { return checkIsNeedUpdateData(id); } }) .map(new Func1<Integer, Data>() { @Override public Data call(Integer id) { return updateData(id); } }) .observeOn(AndroidSchedulers.mainThread()) // 后续操作在主线程 .subscribe(new Action1<Data>() { @Override public void call(Data data) { data2ui(data); } }); // Func1 为有1个输入1个输出的接口,范型对应输入输出类型 // Action1 为有1个输入0个输出的接口,即有输入的可执行代码块,范型对应输入类型 RxAndroid 通过一句话切换线程,把所有操作摊平了,就好像是线性执行的,并且逻辑在代码块内显得清晰简单: id -> 过滤是否需要刷新,不需要则后续操作不执行,需要则继续传递 id -> data -> ui 再举例:请求网络图片,加载到某 imageView 并统计该图片出现最多的颜色设置为背景色,假设计算背景色比较耗时 Observable.just(imageUrl) .subscribeOn(Schedulers.newThread()) .map(imageUrl -> getBitmap(imageUrl)) // 子线程加载图片 .observeOn(AndroidSchedulers.mainThread()) .doOnNext(bitmap -> iamgeView.setBitmap(bitmap)) // 主线程刷新图片 ui .observeOn(Schedulers.newThread()) .map(bitmap -> getBackgroundColor(bitmap)) // 子线程计算背景色 .observeOn(AndroidSchedulers.mainThread()) .subscribe(colorInt -> setBackgroundColor(colorInt)); // 主线程刷新背景色 ui 抛砖引玉,还有更多用法和特性我也就不太懂了,感觉 RxAndroid 还是挺有意思的,特别是配合 Retrofit 做网络请求很简洁
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dss886机器人#1 · 2016/5/16
感觉非常不错啊,多层Callback嵌套简直了。。。
axpq110机器人#2 · 2016/5/16
callback 里如果既封装了 onResult 又封装了 OnError 的话,多层嵌套口味更佳喔 【 在 dss886 的大作中提到: 】 : 感觉非常不错啊,多层Callback嵌套简直了。。。
Override机器人#3 · 2016/5/16
看到有人@我我就来了
axpq110机器人#4 · 2016/5/16
... 大兄弟你咋不上天呢 /笑cry /笑cry /笑cry 【 在 Override 的大作中提到: 】 : 看到有人@我我就来了
hailixiansen机器人#5 · 2016/5/16
问下楼主哪里能了解rxAndroid呢?比较官方或者写的比较好的博客之类给推荐一下?
axpq110机器人#6 · 2016/5/16
https://github.com/lzyzsd/Awesome-RxJava 【 在 hailixiansen 的大作中提到: 】 : 问下楼主哪里能了解rxAndroid呢?比较官方或者写的比较好的博客之类给推荐一下?
hailixiansen机器人#7 · 2016/5/16
谢啦 【 在 axpq110 的大作中提到: 】 : https://github.com/lzyzsd/Awesome-RxJava :
mhy8958机器人#8 · 2016/5/16
同感觉RxJava、RxAndroid挺不错的
dss886机器人#9 · 2016/5/16
。。。。请问qq也是你的小号吗 【 在 Override 的大作中提到: 】 : 看到有人@我我就来了