赞
踩
最近学习了下RXjava(学习的是1.x版本和2.X版本还是有很大的区别的),在此记录下:
今天只是简单的学习,并未涉及到异步的操作,只是RXjava的入门使用.
首先最重要的是4大要素是:observable(被观察者),observer(观察者),subscribe(订阅),事件。用一句话介绍就是observable通过subscribe订阅到observer上,observable在需要时发出事件来通知observer
在使用RXjava时在build.gradle中dependencies的代码块引入依赖:
1.1版本的引入
compile'io.reactivex:rxandroid:1.1.0'
compile'io.reactivex:rxjava:1.1.0'
2.X版本的 引入
compile "io.reactivex.rxjava2:rxjava:2.x.y"
RXjava类似观察者模式,既然类似观察者就要有观察者和被观察者,两者分别是Observable(被观察者)和Observer(观察者)
两者之间的关系如图:
Onstart的方法是在observable订阅到观察者后、事件还未发送前执行的,运行在订阅的线程内,可以做些数据的重置或清零的操作。不适用于需要指定线程的操走,如果需要在指定的线程内工作可以使用doOnSubScribe()方法(该方法是observable的方法,在被观察者类调用)。
UnsubScrible是取消订阅,在取消订阅前需要判断是有订阅(isunsubscribed方法)再进行取消订阅的操作。在取消订阅后观察者将不再接收任何事件
注:一定要取消订阅,不然会有内存泄露的危险
Observable的具体实现:
Create方法:
传入Onsubscribe作为参数,保存在返回的Observable对象里。
FROM的方法:
JUST的方法:
Observer的具体实现是:
Observer在subscribe时,最终也是转换为subscriber后进一步处理的
实现了observer的subscriber的实现方法是:
例子给textView赋值:
tv=(TextView)findViewById(R.id.tv);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("hello word");
}
}).subscribe(new Observer<String>() {
@Override
public void onCompleted() {
Log.e("lxy","OK");
}
@Override
public void onError(Throwable e) {
Log.e("lxy","ERROR");
}
@Override
public void onNext(String s) {
tv.setText(s);
}
});
}
});
xml文件:
<TextView
android:layout_width="200dp"
android:layout_height="100dp"
android:id="@+id/tv"
android:background="#ffaa44"
android:gravity="center"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
引入依赖:
dependencies{
compile 'io.reactivex:rxjava:1.1.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.google.android.gms:play-services-appindexing:8.1.0'
}
参考文章:http://gank.io/post/560e15be2dca930e00da1083#toc_1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。