美文网首页
RxJava使用篇

RxJava使用篇

作者: 被虐的小鸡 | 来源:发表于2020-08-05 17:24 被阅读0次

    RxJava

    Rx作为响应式编程的框架,其中还可以进行异步流操作,所以在Android中一定要配合RxAndroid使用。
    RxJava内部实际上采用了观察者设计模式,那么简单举一个例子来说明什么是观察者模式。


    观察者模式.png

    在这里我们自己是被观察者,爸爸妈妈还有亲戚是观察者,当我们考试成绩下来之后需要通知观察者。

    //观察者
    public interface Observer {
        void receive(String s);
    }
    //被观察者
    public interface Observable {
        void addObserver(Observer o);
    
        void removeObserver(Observer o);
    
        void notifyObservers(String s);
    
    }
    //家人
    public class Human implements Observer {
        private String name;
    
        public Human(String name) {
            this.name=name;
        }
    
        @Override
        public void receive(String s) {
            System.out.println("name="+name+",info="+s);
        }
    }
    //我自己
    public class Me implements Observable{
    
        List<Observer> list=new ArrayList<>();
    
        @Override
        public void addObserver(Observer o) {
            list.add(o);
        }
    
        @Override
        public void removeObserver(Observer o) {
            list.remove(o);
        }
    
        @Override
        public void notifyObservers(String s) {
    
            for (int i = 0; i <list.size() ; i++) {
                Observer observer = list.get(i);
                observer.receive(s);
            }
        }
    
    
        public void getGrade(){
            String s="me getGrade 60";
    
            System.out.println(s);
    
            notifyObservers(s);
        }
    }
    //test
    public class Test {
        public static void main(String[] args) {
            Human baba = new Human("baba");
            Human mama = new Human("mama");
            Human nainai = new Human("nainai");
    
            Me me = new Me();
    
            me.addObserver(baba);
            me.addObserver(mama);
            me.addObserver(nainai);
    
            me.getGrade();
        }
    }
    

    简单用法

    调用just操作符

    disposable = Observable.just("A")
                    .map(new Function<String, Bitmap>() {
                        @Override
                        public Bitmap apply(String s) throws Throwable {
                            return null;
                        }
                    })
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Consumer<Bitmap>() {
                        @Override
                        public void accept(Bitmap o) throws Throwable {
    
                        }
                    });
     @Override
        protected void onDestroy() {
            super.onDestroy();
            //必须要在这里中断,否则会内存泄漏
            if (disposable!=null)
                if (!disposable.isDisposed())
                    disposable.dispose();
        }
    
    Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Throwable {
                    emitter.onNext("A");
                }
            }).map(new Function<String, Bitmap>() {
                @Override
                public Bitmap apply(String s) throws Throwable {
                    return null;
                }
            }).subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<Bitmap>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {
                            disposable=d;
                        }
    
                        @Override
                        public void onNext(@NonNull Bitmap bitmap) {
    
                        }
    
                        @Override
                        public void onError(@NonNull Throwable e) {
    
                        }
    
                        @Override
                        public void onComplete() {
    
                        }
                    });
    

    使用flatmap操作符可以多次触发改变
    如果我们存在嵌套请求的时候,当请求完第一个接口的时候,使用doOnNext就可以去主线程刷新数据,然后再去请求下一个接口,再去刷新数据。

    List<String> s=new ArrayList<>();
            s.add("a");
            s.add("b");
            disposable=Observable.just(s)
                    .flatMap(new Function<List<String>, Observable<String>>() {
                        @Override
                        public Observable<String> apply(List<String> list) throws Throwable {
                            return Observable.fromIterable(list);
                        }
                    }).doOnNext(new Consumer<String>() {
                @Override
                public void accept(String s) throws Throwable {
                    
                }
            }).subscribe(new Consumer<String>() {
                @Override
                public void accept(String s) throws Throwable {
    
                }
            });
    

    简单概念

    Observable 是被观察者
    Observer是观察者
    subscribe 是订阅
    当我们需要观察某一个被观察者的行为的时候可以在过程中添加自己的卡片,对中间的数据进行处理。


    Rx添加中间处理层.png

    相关文章

      网友评论

          本文标题:RxJava使用篇

          本文链接:https://www.haomeiwen.com/subject/lmpnrktx.html