Android自助餐之RxJava手册
来源:互联网 发布:sql有哪几级权限 编辑:程序博客网 时间:2024/04/29 10:55
Android自助餐之RxJava手册
- Android自助餐之RxJava手册
- 下载完整源代码
- 观察者
- 被观察对象
- 方法封装
- 类型转换
- 线程控制
下载完整源代码
观察者
- Observer
- onNext()
- onCompleted();
- onError();
- Subscriber
- 继承Observer
- onStart();在开始发送事件前
- subscriber.unsubscribe();取消订阅
被观察对象
Observable.create(Observable.OnSubscribe());
Observable.create(new Observable.OnSubscribe<String>(){ @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("a"); subscriber.onNext("aa"); subscriber.onNext("aaa"); subscriber.onCompleted(); }});
- Observable.just();
Observable.just("a","aa","aaa"); - Observable.from();
ArrayList<String> strings = new ArrayList<>();
Observable.from(strings);
方法封装
FuncX
封装带有x个参数的带返回值方法。ActionX
封装带有x个参数的无返回值方法。public static void demoOfAction() { Observable.from(DataManager.getInstance().getData()) .subscribe(new Action1<String>() { @Override public void call(String s) { LogUtil.e("next",s); } });//将事件发给订阅者}
类型转换
map()一对一转换
public static void demoOfMap(){ Observable.from(DataManager.getInstance().getData()) .map(new Func1<String, Car>() { private int count=0; @Override public Car call(String s) { return new Car(count++,s); } })//将事件内容转型 .subscribe(new Action1<Car>() { @Override public void call(Car car) { LogUtil.e("next",car.getStyle()); } });//将事件发给订阅者}
- flatMap()一对多转换
public static void demoOfFlatMap() {
//一个人有多辆车,输出每个人的每个车
Observable.from(DataManager.getInstance().getPserson())
.flatMap(new Func1<Person, Observable<Car>>() {
@Override
public Observable<Car> call(Person person) {
return Observable.from(person.getCars());
}
})
.subscribe(new Action1<Car>() {
@Override
public void call(Car car) {
LogUtil.e("car",car.getStyle());
}
});
}
线程控制
- subscribeOn()指定被观察对象线程
- observeOn()指定观察者线程
- Schedulers.immediate();当前线程
- Schedulers.newThread();新开一个线程
- Schedulers.io();与newThread()差不多,但io()中内置无数量上限的线程池。注意不要把计算操作放在这里,避免创建多余的线程。
- Schedulers.computation();与io()的区别在于其线程池大小固定,大小为CPU核心数。注意不要把I/O操作放在这里,避免浪费CPU。
- AndroidSchedulers.mainThread();UI线程。
public static void demoOfScheduler() { //创建观察者 Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() {} @Override public void onError(Throwable e) {} @Override public void onNext(String s) { LogUtil.e("next-thread",Thread.currentThread().getId()+"<->"+Thread.currentThread().getName()); } }; //创建被观察对象 Observable.OnSubscribe<String> observable = new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { LogUtil.e("send-thread",Thread.currentThread().getId()+"<->"+Thread.currentThread().getName()); subscriber.onNext("gfsdh"); subscriber.onNext("dfshs"); subscriber.onNext("fdsa"); subscriber.onCompleted(); } }; //开始搞起 Observable.create(observable) .subscribeOn(Schedulers.io())//指定事件发生线程 .observeOn(Schedulers.newThread())//指定下一个事件处理线程 .map(new Func1<String, Car>() { private int count=0; @Override public Car call(String s) { LogUtil.e("to-car-thread",Thread.currentThread().getId()+"<->"+Thread.currentThread().getName()); return new Car(count++,s); } })//将事件内容转型 .observeOn(Schedulers.newThread())//指定一下一个事件处理线程 .map(new Func1<Car, Person>() { private int count=0; @Override public Person call(Car car) { LogUtil.e("to-person-thread",Thread.currentThread().getId()+"<->"+Thread.currentThread().getName()); return new Person(car.getStyle(),count++); } })//将事件内容转型 .observeOn(Schedulers.computation())//指定一下一个事件处理线程 .map(new Func1<Person, String>() { @Override public String call(Person person) { LogUtil.e("to-string-thread",Thread.currentThread().getId()+"<->"+Thread.currentThread().getName()); return person.getName(); } })//将事件内容转型 .observeOn(AndroidSchedulers.mainThread())//指定一下一个事件处理线程 .subscribe(subscriber);//将事件发给订阅者}
E/send-thread: 6412<->RxCachedThreadScheduler-1E/to-car-thread: 6410<->RxNewThreadScheduler-2E/to-car-thread: 6410<->RxNewThreadScheduler-2E/to-person-thread: 6409<->RxNewThreadScheduler-1E/to-car-thread: 6410<->RxNewThreadScheduler-2E/to-person-thread: 6409<->RxNewThreadScheduler-1E/to-person-thread: 6409<->RxNewThreadScheduler-1E/to-string-thread: 6408<->RxComputationThreadPool-3E/to-string-thread: 6408<->RxComputationThreadPool-3E/to-string-thread: 6408<->RxComputationThreadPool-3E/next-thread: 1<->mainE/next-thread: 1<->mainE/next-thread: 1<->main
1 0
- Android自助餐之RxJava手册
- Android自助餐之SQLite
- Android自助餐之SharedPreferences
- Android自助餐之AsyncTask
- Android自助餐之SoundPool
- Android自助餐之XML
- Android自助餐之notification
- Android自助餐之文件存储
- Android自助餐之EventBus框架
- Android自助餐之解析zip
- Android自助餐之View生命周期
- Android自助餐之Fragment与Activity通信
- Android自助餐之点击事件传递
- Android自助餐之内容提供者ContentProvider使用
- Android自助餐之控件注解IOC
- Android自助餐之adb使用场景
- Android自助餐之Jni(五)进阶
- Android自助餐之大图片加载
- 【bzoj2829】【信用卡凸包】【凸包】
- Android Studio如何设置代码自动提示
- 【个人笔记】PL/SQL 基本编程
- tomcat 解析(五)-Tomcat的核心组成和启动过程
- Python 小练习 倒序输出
- Android自助餐之RxJava手册
- jquery submit()不能提交表单的解决方法
- UITableViewCell的操作(增加cell,删除cell,插入cell)
- 课后题详解
- 设计模式遵循的几个基本原则
- getRequestDispatcher 和sendRedirect区别
- Centos6.5安装Hadoop配置集群环境
- 第一次打字成绩
- 虚拟现实-VR-UE4-获取UE4