当前位置: 代码迷 >> 综合 >> rxJava基础篇之二
  详细解决方案

rxJava基础篇之二

热度:80   发布时间:2023-10-15 10:56:52.0
rxJava需要的依赖:
compile 'io.reactivex:rxjava:1.1.6'
compile 'io.reactivex:rxandroid:1.2.1'


public class MainActivity2 extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2_main);
        Observable.just(1, 2, 3)
                .map(new Func1<Integer, String>() {
                    @Override
                    public String call(Integer integer) {
                        return integer + "map1";//由于下面的subscribeOn(Schedulers.io()),所以这个方法是在异步里面执行
                    }
                })
                .subscribeOn(Schedulers.io())
                .map(new Func1<String, String>() {
                    @Override
                    public String call(String s) {
                        return s + "map2";//由于没有进行切换线程,所以还是在异步里面执行
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Func1<String, String>() {
                    @Override
                    public String call(String s) {
                        return s + "map3";//由于上面的observeOn(AndroidSchedulers.mainThread()),所以这个方法在主线程里面执行
                    }
                })
                .observeOn(Schedulers.io())
                .map(new Func1<String, String>() {
                    @Override
                    public String call(String s) {
                        return s + "map4";//由于上面的observeOn(Schedulers.io()),所以这个方法在异步里面执行
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Func1<String, String>() {
                    @Override
                    public String call(String s) {
                        return s + "map5";//由于上面的observeOn(AndroidSchedulers.mainThread()),所以这个方法在主线程里面执行
                    }
                })
                .subscribeOn(Schedulers.io())//这个由于是在obServeOn后面的操作,算无效
                .map(new Func1<String, String>() {
                    @Override
                    public String call(String s) {
                        /**
                         * 由于上面的subscribeOn(Schedulers.io())是在observeOn(AndroidSchedulers.mainThread())后面执行
                         * ,相当于冲突一样,并且observeOn后面括号里面的线程决定改行下面的操作在指定的线程里面执行,而subscr
                         * ibceOn括号里面的线程是指示该行上面的代码在指定的线程里面执行,如果subscribeOn在observeOn的后面执行
                         * 那么就无效,所以不建议这样写
                         */
                        return s+"map6";
                    }
                })
                .subscribe(new Subscriber<String>() {
                    @Override
                    public void onCompleted() {


                    }


                    @Override
                    public void onError(Throwable e) {


                    }


                    @Override
                    public void onNext(String s) {


                    }
                });
    }
}