返回信息流最近了解了点 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 做网络请求很简洁
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #30485同步于 2016/5/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
闲扯点 RxAndroid
axpq110
2016/5/16镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
callback 里如果既封装了 onResult 又封装了 OnError 的话,多层嵌套口味更佳喔
【 在 dss886 的大作中提到: 】
: 感觉非常不错啊,多层Callback嵌套简直了。。。
https://github.com/lzyzsd/Awesome-RxJava
【 在 hailixiansen 的大作中提到: 】
: 问下楼主哪里能了解rxAndroid呢?比较官方或者写的比较好的博客之类给推荐一下?