RxJava是异步操作的一个库,支持被观察者的扩展。
Schedulers(调度器):解决Android主线程和多线程问题。
观察者四大要素:
1. Observable(被观察者)
2. Observer(观察者)
3. subscribe(订阅)
4. 事件
RxJava实战示例
1. 在AndroidStudio中导入compile ‘io.reactivex:rxjava:1.0.14’
2.
public class MainActivity extends AppCompatActivity {
private String TAG="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.创建观察者
Observable myOnservable=Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
Log.i(TAG, "call: 回掉");
//发送事件
subscriber.onNext("你好,世界~");
subscriber.onCompleted();
}
});
//2.创建被观察者
Subscriber subscriber=new Subscriber<String>() {
@Override
public void onCompleted() {
//执行完成
Log.i(TAG, "onCompleted:");
}
@Override
public void onError(Throwable e) {
//执行过程中发生错误
}
@Override
public void onNext(String s) {
//获取到传来的值
Log.i(TAG, "onNext: "+s);
}
};
//3.订阅事件,被观察者订阅观察者
myOnservable.subscribe(subscriber);
}
}
执行结果
12-21 14:16:37.731 2503-2503/demo.com.rxandroiddemo I/MainActivity: call: 回掉
12-21 14:16:37.731 2503-2503/demo.com.rxandroiddemo I/MainActivity: onNext: 你好,世界~
12-21 14:16:37.731 2503-2503/demo.com.rxandroiddemo I/MainActivity: onCompleted:
操作符:
just
创建Observable可以用just(),相当于create();just是将create()代码简化了。
例如
Observable myOnservable=Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
Log.i(TAG, "call: 回掉");
//发送事件
subscriber.onNext("你好,世界~");
subscriber.onCompleted();
}
});
相当于这句代码Observable myOnservable=Observable.just("你好,世界~");
from
可以将数组的值或者集合的值传递,例如
//1.创建观察者
Observable myOnservable=Observable.from(new Integer[]{1,2,3,4,5,6});
//2.创建被观察者
Subscriber subscriber=new Subscriber<Integer>() {
@Override
public void onCompleted() {
//执行完成
Log.i(TAG, "onCompleted:");
}
@Override
public void onError(Throwable e) {
//执行过程中发生错误
}
@Override
public void onNext(Integer s) {
//获取到传来的值
Log.i(TAG, "onNext: "+s);
}
};
//3.订阅事件,被观察者订阅观察者
myOnservable.subscribe(subscriber);
执行结果
12-21 14:41:46.078 26056-26056/? I/MainActivity: onNext: 1
12-21 14:41:46.079 26056-26056/? I/MainActivity: onNext: 2
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 3
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 4
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 5
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 6
12-21 14:41:46.080 26056-26056/? I/MainActivity: onCompleted:
还有例如传递集合的值
List<Integer> lists=new ArrayList<>();
for (int i = 0; i < 6; i++) {
lists.add(i);
}
//1.创建观察者
Observable myOnservable=Observable.from(lists);
//下面的代码和上面一样,省略
defer:是被订阅者订阅观察者之后执行的,myOnservable.subscribe(subscriber);在这句代码之后执行里面的回掉
public class MainActivity extends AppCompatActivity {
private String TAG="MainActivity";
private String msg="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.创建观察者
Observable myOnservable=Observable.defer(new Func0<Observable<String>>() {
@Override
public Observable call() {
return Observable.just(msg);
}
});
//2.创建被观察者
Subscriber subscriber=new Subscriber<String>() {
@Override
public void onCompleted() {
//执行完成
Log.i(TAG, "onCompleted:");
}
@Override
public void onError(Throwable e) {
//执行过程中发生错误
}
@Override
public void onNext(String s) {
//获取到传来的值
Log.i(TAG, "onNext: "+s);
}
};
msg="练习";
//3.订阅事件,被观察者订阅观察者
myOnservable.subscribe(subscriber);
}
}
可以将练习打印出来
而用just代码则不可以,注:主要是练习赋值的地方不一样
public class MainActivity extends AppCompatActivity {
private String TAG="MainActivity";
private String msg="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.创建观察者
Observable myOnservable=Observable.just(msg);
//2.创建被观察者
Subscriber subscriber=new Subscriber<String>() {
@Override
public void onCompleted() {
//执行完成
Log.i(TAG, "onCompleted:");
}
@Override
public void onError(Throwable e) {
//执行过程中发生错误
}
@Override
public void onNext(String s) {
//获取到传来的值
Log.i(TAG, "onNext: "+s);
}
};
msg="练习";
//3.订阅事件,被观察者订阅观察者
myOnservable.subscribe(subscriber);
}
}
Interval:相当于一个定时器,可以定间隔的时间发送一个值
range(int a,int b):从a–>b之间的值依次传递
Repeat(n):n次重复的发送值
start:开始发送一个值
Timer:也相当于一个定时器发送值