Rxjava

Rxjava  :  异步操作 变换 逻辑简洁清楚

 

观察者模式   观察者通过订阅的方式告诉被观察者,当你发生变化的时候你要告诉我。

 

Observable 被观察者   Observer观察者  subscribe 订阅

他们通过subscribe()方法来实现订阅关系。

 

Rxjava的回调方法 onNext()事件,onCompleted()事件队列结束标志,onError()事件异常,阻断新事件继续进行。

 

观察者Observer 实现方法(事件触发之后的行为)

Observer<String> Observer = new Observer<String>()

{

@override

Public void onNext(String s){}

@override

Public void onCompleted(){}

@override

Public void onError(Throwable e){}

};

 

Subscriber 是Observer的扩展

增加了onStart()方法用于在subscribe之后事件还没发送之前进行一些准备工作,它自己不能单独指定线程,要在subscribe线程里运行。

增加了unsubscribe()用于取消订阅,用之前先判断一下取消订阅了没有isUnsubscribe(),取消之后,subscribe将不再接收事件,不再需要订阅关系要及时释放资源避免泄露。

被观察者Observable实现方法(由它来触发某种事件)

Observable observable = Observable.create(new Observable

.OnSubscribe<String>(){

public void call(Subscriber<? super String> subscriber)

{

subscriber.onNext(“1”);

subscriber.onNext(“2”);

subscriber.onNext(“3”);

Subscriber.onCompleted();

}

})

Observable传入了一个OnSubscribe类型,当observable被订阅了的时候就会调用它的call()方法,这样回调subscriber(观察者)的方法把变动的事件(字符串)传给Observer(观察者),就完成了整个模式。

 

快捷发送事件

Observable observable = Observable.just(T...);

Observable observable = Observable.from(T[]...);

 

然后关联起来

Observable.subscribe(observer);

Observable.subscribe(subscriber);

 

传进来的观察者还可以是不完整的,subscribe()方法可以自动创建出subscriber。

Action0 是无参 无返回值 Action1 有参数 无返回值,都有只有call()方法。

 

比如这么写

String names = {.......};

Observable.from(names).subscribe(new Action1(String){

public void call(String s)

{

这里就可以一个个把名字打印出来

}

});

 

比如 取某个id的图片资源放到view上,异常了打印

Int drableRes = ;图片资源id

ImageView imageview = ;view的对象

Observable.create(new Onsubscribe(Drable){

public void call(Subscriber<? Super Drable> subscriber)

{

subscriber.onNext(Drable);

subscriber.onCompleted();

}

}).subscribe(new Observer<Drable>(){

public void onNext(Drable drable)

{

imageview.setImageDrable(drable);

}

public void onCompleted(){};

public void onError(Throwable e)

{

Toast.makeText();

}

});

Scheduler(线程调度器)

Scheduler.newThread()总是启用新线程并在新线程执行操作

Scheduler.io()读写文件,网络请求,不能用于计算

Scheduler.computation()用于计算

AdroidScheduler.mainTread()主线程里运行

一般设置在subscribe前

subscribeOn(Scheduler.io())指定订阅操作在io线程

observeOn(AdroidScheduler.mainTread())subscriber回调指定在主线程里,这样在io线程那到数据并在主线程里更新页面。

 

对事件序列进行变换  Func1()包装有返回值的call方法

Observable.just(String a)

.map(new Func1<String,int>(){

Override

public int call(String a)

{

这里return 一个int类型回去

}

}).subscribe(new Action1(int){

Override

public void call(int b)

{

这里就拿到int 类型

}

});

 

这是一对一转化,还可以把对象的某个属性合起来发出去

 

Student[] student = ....;

Observable.from(student)

.flatMap(new Func1<Student,Observable<source>>(){

Override

public source call(Student s)

{

return Observable.from(student.getSource());

}

}).subscribe(new Observer<Source>(){

Override

public void onNext(Source s)

{

打印s.get........;

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值