第一天
初学rxjava,哪里写得不好的大家多多指教!
依赖导入
github rxjava
可以打出特别漂亮的日志的框架,额外推荐 logger
dependencies {
……
//rxjava
compile ‘io.reactivex:rxandroid:1.2.1’
compile ‘io.reactivex:rxjava:1.1.6’
//logger
compile ‘com.orhanobut:logger:1.15’
}
小试牛刀
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 通过create方法创建可观察对象(observable)
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
//通过subscribeOn(Schedulers.io()) 来设置订阅线程
//通过调用onNext()方法向主线程传输工作结果
subscriber.onNext("s");
}
});
//进行订阅(subscriber)
observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
//通过observeOn(AndroidSchedulers.mainThread()) 来设置观察线程
}
@Override
public void onError(Throwable e) {
//通过observeOn(AndroidSchedulers.mainThread()) 来设置观察线程
}
@Override
public void onNext(String s) {
//通过observeOn(AndroidSchedulers.mainThread()) 来设置观察线程
Logger.i("next");
}
});
//Schedulers.io()为子线程
//ndroidSchedulers.mainThread()为主线程
}
}
解决问题
在android开发过程中我们经常会涉及到主线程与工作线程的切换,或者是说当我们在子线程做完某项事情后需要通知主线程,以前涉及到用handler或者异步任务,写起来相对繁琐这里我们可以比较快捷的实现。
通过
observable.subscribeOn(Schedulers.io())来确定call()方法在子线程执行
通过
observable.observeOn(AndroidSchedulers.mainThread()) 来确定onError()、onNext()、onCompleted()在主线程执行
注意事项
- 若不设置线程默认都是在主线程中执行。
- 仅仅创建了observable对象是不会执行任何的代码的,只有订阅后才会调用call()方法