Rxjava是观察者--订阅者模式
1.始终创建新线程
.observeOn(Schedulers.newThread());
2.合理利用,避免不必要的线程 多数情况下 io() 比 newThread() 更有效率
.observeOn(Schedulers.io())
3.在主线程处理
.observeOn(AndroidSchedulers.mainThread())
4Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。
下面举个例子把:
Observable.just("main2")
.observeOn(Schedulers.io())
.map(
new Func1<String, String>() {
@Override
public String call(String bean) {
//Step1子
return "t1";
} }
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
new Action1<String>() {
@Override
public void call(String s) {
//Step3?3/4主--主要是看谁快了
// Log.d("zzz",s.getA1());
Log.i("zxcrxjava","test2=="+Thread.currentThread().getId());
}
}
);
Observable.just("main2")
.observeOn(Schedulers.io())
.map(
new Func1<String, String>() {
@Override
public String call(String bean) {
//Step2子
return "t1";
} }
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
new Action1<String>() {
@Override
public void call(String s) {
//Step4?主
}
}
);
如果要开启多个子线程,就直接用上面的例子贴几遍
2如果需要在主线程调用多次,则直接在map里增加就可以了
链式调用map形式
Observable.just("main")
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.newThread())
.map(
new Func1<String, String>() {
@Override
public String call(String bean) {
// bean.setA1(bean.getA1()+"start3");
Log.i("zxcrxjava",bean+"more1=="+Thread.currentThread().getId());
return "t1";
} }
)
.observeOn(Schedulers.newThread())
.map(
new Func1<String, String>() {
@Override
public String call(String bean) {
// bean.setA1(bean.getA1()+"start3");
try {
Thread.sleep(10000);
}
catch (Exception e){}
Log.i("zxcrxjava",bean+"more2=="+Thread.currentThread().getId());
return "t2";
} }
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
new Action1<String>() {
@Override
public void call(String s) {
// Log.d("zzz",s.getA1());
Log.i("zxcrxjava",s+"more3=="+Thread.currentThread().getId());
}
}
);