Rxjava详解(一)
来源:互联网 发布:手机数据损坏如何恢复 编辑:程序博客网 时间:2024/06/05 14:08
Rxjava
rxjava(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库),与AsyncTask、 Handler 等相比,它有个很明显的优势——代码逻辑简洁。
基本概念
1.Observable:发射源,英文释义“可观察的”,在观察者模式中称为“被观察者”或“可观察对象”;
2.Observer:接收源,英文释义“观察者”,没错!就是观察者模式中的“观察者”,可接收Observable发射的数据;
3.Subscriber:“订阅者”,也是接收源,那它跟Observer有什么区别呢?Subscriber实现了Observer接口,比Observer多了一个最重要的方法unsubscribe( ),用来取消订阅,当你不再想接收数据了,可以调用unsubscribe( )方法停止接收,Observer 在 subscribe() 过程中,最终也会被转换成 Subscriber 对象,一般情况下,建议使用Subscriber作为接收源;
4.Subscription :Observable调用subscribe( )方法返回的对象,同样有unsubscribe( )方法,可以用来取消订阅事件;
5.Action0:RxJava中的一个接口,它只有一个无参call()方法,且无返回值,同样还有Action1,Action2…Action9等,Action1封装了含有 1 个参的call()方法,即call(T t),Action2封装了含有 2 个参数的call方法,即call(T1 t1,T2 t2),以此类推;
6.Func0:与Action0非常相似,也有call()方法,但是它是有返回值的,同样也有Func0、Func1…Func9;
rxjava的简单用法
1.引入Rxjava(我使用的是AS),在build.gradle中引入如下依赖。
2.发射和订阅
public class MainActivity extends Activity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //打印当前线程id Log.i(TAG,"main:"+android.os.Process.myTid()); //生成发射源 Observable observable = Observable.create(new Observable.OnSubscribe<String>() { //这个回调方法中通常是些耗时操作,如:网络请求、文件读写等 @Override public void call(Subscriber<? super String> subscriber) { Log.i(TAG,"call:"+android.os.Process.myTid()); //发射数据 subscriber.onNext("Hello"); subscriber.onNext("Hi"); subscriber.onNext("Well"); subscriber.onCompleted(); } }) .subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程 .observeOn(AndroidSchedulers.mainThread());// 指定 Subscriber 的回调发生在主线程 //生成订阅者 Subscriber subscriber = new Subscriber() { @Override public void onCompleted() { Log.i(TAG,"onCompleted:"+android.os.Process.myTid()); } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { Log.i(TAG,"onNext:"+o.toString()); Log.i(TAG,"onNext:"+android.os.Process.myTid()); } }; //订阅 observable.subscribe(subscriber); }}
运行结果
“`
- Rxjava详解(一)
- RxJava学习详解(一)
- RxJava 的使用详解(一)
- Android RxJava详解(一)
- RxJava详解(一)
- Android RxJava 2.x入门例子详解(一)
- RxJava教程(一)
- Rxjava要素(一)
- Rxjava源码(一)
- RxJava使用(一)
- RxJava 初探(一)
- 王学岗RxJava(一)
- RxJava 学习(一)
- RxJava从零开始(一)
- RxJava学习(一)
- RXjava学习(一)
- RxJava入门(一)
- RxJava上手(一)
- 立体匹配---立体匹配算法最新动态
- 为什么 Nginx 的性能要比 Apache 高很多?
- 关于ADB 没有驱动的问题
- 数字IP的作用以及转换
- C++ map,set内部数据结构简析
- Rxjava详解(一)
- IOS 图片滤镜效果处理
- PS 抠图大总结
- Learning Spark笔记9-确定RDD分区
- 本我、自我与超我
- “一个程序员的Java和C,C++学习之路”阅读笔记1
- Android Studio中设置作者和创建日期、时间等注释模板
- 基于Socket实现的android端和PC端同步绘画板
- sql之left join、right join、inner join的区别