Android工程師學RxJava(二):進階

上一篇中,介紹了RxJava的基本用法,下面就更多的用法進行介紹。

ActionX

ActionX爲不完整定義的回調,最常用的就是Action0和Action1接口,他們都有一個call方法,Action0是沒有參數的,Action1是有參數的,像這樣:

Action0 action0 = new Action0() {
            @Override
            public void call() {

            }
        };
Action1<String> action1 = new Action1<String>() {
            @Override
            public void call(String s) {

            }
        };

具體用法如下:

String[] names = {"robot", "rose"};
Observable.from(names).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        Log.i("rxjava", s);
    }
});

多線程操作

前面說過,Rxjava強大之處之一就有對線程的控制,而且使用起來及其簡便,比android帶的asynctask還要好用,只需要subscribeOn()和observeOn()兩個方法就能實現線程切換。我先介紹一下Scheduler ,這就是線程控制器,有兩個我們經常用的Schedulers.io()和AndroidSchedulers.mainThread(),分別指我們另起的新線程和android的主線程。

subscribeOn()指定訂閱者被激活的線程,observeOn()指定事件消費的線程,就是觀察者運行的線程。就像下面的代碼:

        String[] names = {"robot", "rose"};
        Observable.from(names)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.i("rxjava", s);
                    }
                });

這段代碼就是發送”names” 這個事件會在新線程中發送,而打印log這個事件會發生在主線程中。通常我們有耗時操作的話,都會用這種方式來處理。

變換

這個功能很強大,可以讓我們利用操作符(Operators)進行很多隨心所欲的操作。比如下面這段使用map()操作符:

        Observable.just(100)
                .map(new Func1<Integer, String>() {
                    @Override
                    public String call(Integer i) {
                        return String.valueOf(i);
                    }
                })
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.i("rxjava", s);
                    }
                });

可以看到,map裏面有Func1這個接口,他和ActionX這些接口類似,只不過FuncX這些接口是有返回值的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章