RxJava是现在非常流行的技术,很长时间之前就想要学,直到最近(嘿嘿就是自己比较懒)才有时间在网上找资料学学这门技术,RxJava简单的来说就是将编程的逻辑简洁化,
写着品博客就是为了以后自己好复习,有什么错误的请各位大大指教
RxJava的组成由观察者模式+Lamdba表达式+Scheduler
关于RxJava中方法的一些说明请参考点击打开链接
RxJava简单的使用:
Observable observable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Object o) {
Subscriber sub = (Subscriber) o;
sub.onNext(bytes[0] + "");
sub.onNext(bytes[1] + "");
sub.onNext(bytes[2] + "");
}
});
Subscriber subscriber1 = new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
String string = (String) o;
tvTest1.setText(string);
tvTest2.setText(string);
tvTest3.setText(string);
}
};
先要有一个Observeable可观察者 再有一个 事件的接收者 Subscriber在创建Subscriber的时候需要重写三个方法onNext()方法是主要处理事件的方法
public class RxJavaActivity extends AppCompatActivity {
private Button btnTest;
private TextView tvShow;
private String TAG = this.getClass().getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rx_java);
btnTest = (Button) findViewById(R.id.btn_test);
tvShow = (TextView) findViewById(R.id.tv_show);
/* final Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("11111");
subscriber.onNext("22222");
subscriber.onCompleted();
}
});
final Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError"+e.toString());
}
@Override
public void onNext(String s) {
Log.e(TAG, "onNext"+s);
}
};*/
String array[] = {"1", "2", "3"};
//from方法是从一个数组中取出数据发送给已经注册的观察者进行处理
Observable<String> from = Observable.from(array);
from.subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.e(TAG, s);
}
});
Integer intArr[] = {6, 2, 3, 4, 5};
Observable<Integer> ob = Observable.from(intArr);
ob.scan(new Func2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer integer, Integer integer2) {
//integer是对应数组中的第一个元素,integer2是数组中的所有的元素
//这个方法执行的时候先将第一个数据发送出去之后会将数据叠加发送出去
return integer+integer2;
}
}).map(new Func1<Integer, String>() {
@Override
public String call(Integer integer) {
return String.valueOf(integer);
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Toast.makeText(RxJavaActivity.this, s, Toast.LENGTH_SHORT).show();
}
});
btnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// observable.subscribe(subscriber);
}
});
}
}
RxJava中的Schedulers是管理RxJava中的线程调度的
里面的方法有
Schedulers.io()这个方法将会开启一个新的线程去执行任务并且这个线程是有线程池维护的可以重用的
Schedulers.newThread()这个方法将会开启一个新的线程但是不会有线程池来进行维护
Schedulers.immediate()这个方法将会运行在当前的线程
以上三个方法都是事件产生的线程运行的位置也就是被观察者产生事件的位置
Schedulers.observeOn()是用来控制事件消费的位置的也就是
Subscriber对象处理事件的位置一般都是AndroidSchedulers.mainThread()Android的主线程中
Observable.just(1, 2, 3, 4).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.e(this.getClass().getName(), integer.toString()); Toast.makeText(MainActivity.this, integer.toString(), Toast.LENGTH_SHORT).show(); } });