rxjava 的了解和使用

来源:互联网 发布:饥荒巨人的统治mac版 编辑:程序博客网 时间:2024/05/22 12:47

rxjava 的了解和使用

最近发现好多人都在用rxjava,决定学习一下,看了好多文章,决定记下来大家共同学习,rxjava大神:扔物线,hi大头鬼hi,主要是看的他们的一些文章。

为什么要在android中用到rxjava:

我们为什么要在Android中使用RxJava。

什么是rxjava?

rxjava就是扩展的观察者模式,observer观察者observable被观察者subscribe实现订阅。

实现rxjava

实现rxjava首先要创建observer和observable;

首先创建observer:

       Observer observer = new Observer<String>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(String o) {                Log.i("next",o);            }        };

也可以这样创建observer:

        Subscriber subscriber = new Subscriber<String>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(String o) {            }        };

创建observable:

        Observable observable = Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("hello rxjava");            }        });

使用observable.create是最基本的创建方式,observable还可以这样创建比如参数有多个:

        String[] s = new String[]{"hello","hi"};        Observable observable = Observable.from(s);

或者:

       Observable observable = Observable.just("hello","hi","rxjava");

创建完observable和observer后,就是让这两个联系起来,实现订阅:

       observable.subscribe(subscriber);

想知道输出结果,就自己去敲一遍吧,以上就是简单的一个实现过程。

rxjava中Action1是rxjava的一个接口,他只有一个方法:call(T param),由于这个方法没有返回值只有一个参数,因此 Action1 可以将 onNext(obj) 和 onError(error) 打包起来传入subscribe() 以实现不完整定义的回调。所以还可以这样实现:

       Observable.just("hello","hi","rxjava").subscribe(new Action1<String>() {            @Override            public void call(String s) {                 Log.i("-----",s);            }        });

另外rxjava还能实现线程的控制:

在rxjava中Scheduler来实现线程的转换,Schedulers.io()表示发生在IO线程,Schedulers.newThread()表示开启一个新的线程。rxjava还有一个android专用的线程:AndroidSchedulers.mainThread(),表示发生在android的主线程中。

subscribeOn()表示指定订阅发生的线程,就是subscribe()的线程。

observeOn()表示Subscriber 所运行在的线程。

               Observable.just("hello rxjava")                .subscribeOn(Schedulers.newThread())//发生在新的线程中                .observeOn(AndroidSchedulers.mainThread())//指定发生在主线程中。                .subscribe(new Action1<String>() {                    @Override                    public void call(String s) {                        Log.i("-----",s);                    }                });

另外rxjava还可以实现类型的转换:

下面实现int类型转换成bitmap类型:

    private Bitmap getBitmap(int i) {        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),i);        return bitmap;    }    int drawable = R.mipmap.ic_launcher;        Observable.just(drawable).map(new Func1<Integer, Bitmap>() {            @Override            public Bitmap call(Integer integer) {                return getBitmap(integer);            }        }).subscribeOn(Schedulers.newThread())//int转换成bitmap类型发生在新线程中        .observeOn(AndroidSchedulers.mainThread())//图片得展示发生在主线程中        .subscribe(new Action1<Bitmap>() {            @Override            public void call(Bitmap bitmap) {                image.setImageBitmap(bitmap);            }        });

好啦,就写到这里吧,如果想更好的学习rxjava,建议去看看这篇文章。

0 0