当前位置:   article > 正文

RXjava学习(一)_io.reactivex:rxjava:1.1.0

io.reactivex:rxjava:1.1.0

最近学习了下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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/300751
推荐阅读
相关标签
  

闽ICP备14008679号