网上也看了很多关于rxjava的使用,万变不离其中。
首先都很好奇rxjava是什么,讲真的我也不清楚,感觉挺迷的,但是关于rxjava就知道两点就能轻松使用。
1.观察者模式
2.异步操作
1)什么是观察者模式
上篇文章,也介绍过,讲白了就是观察者去观察被观察者,当被观察者发生动静的时候,观察者有响应,响应之后的事情,视具体情而定了。
2)什么是异步操作,网络请求大家应该并不陌生,网络请求就是最好的异步例子。
这里我讲讲最简单的一个rxjava是如何使用
observable.just("发送一个消息") //过滤操作 .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return s != null; } }) //实现订阅 .subscribe( //创建观察者 new Subscriber<String>() { @Override public void onCompleted() { Log.d("aaa","结束"); } @Override public void onError(Throwable e) { //发生错误时调用 Log.d("aaa","错误信息:"+e.toString()); } @Override public void onNext(String s) { //处理传过来的onNext事件 Log.d("aaa", "接收的结果:" + s); } });
首先,just是一个简洁的用法,它有很多个重载方法
普通的写法是
Observable observable = Observable.create(new Observable.OnSubscribe<String>(){ @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("发送一个消息"); subscriber.onCompleted(); } });使用just可以更好的体现流式的API调用风格
fileter的话,是rxjava的一个操作符,起到的是一个过滤的作用,如果return false,那么onNext方法就不会再调用,直接调用onCompleted方法;
接着subscribe实现订阅操作,订阅的是观察者,里面有3个方法,onCompleted方法,最终都会执行,onNext与onError只会调用一个。
这里为什么是观察者订阅被观察者,也是为了体现流式的API调用风格,其实实质还是观察者订阅被观察者。
最后看看结果
关于异步操作的话,是相对于主线程来讲的子线程操作,我可以将上述代码添加一个新的线程(也就是子线程了),并且指定线程环境为io,其实在这里并没有什么影响的。具体的话结合retrofit2的网络请求会更好理解点的。
observable.just("发送一个消息") //在新的线程中创建被观察者 .subscribeOn(Schedulers.newThread()) //指定线程环境为io线程 .observeOn(Schedulers.io()) //过滤操作 .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return s != null; } })
rxjava的简单使用就是这些了。还有很多操作符,有兴趣的可以好好去搜搜。