IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> rxjava -> 正文阅读

[移动开发]rxjava

是rxjava1.X的版本,现在有2.X了

        /**
        被观察者
         **/
        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            //当 Observable被订阅的时候,Observable.OnSubscribe的call()方法会自动被调用,
            //事件序列就会依照设定依次触发。这样,由被观察者调用了观察者的回调方法,
            //就实现了由被观察者向观察者的事件传递
            public void call(Subscriber<? super String> subscriber) {
                System.out.println("test call");
                //定义事件队列
                subscriber.onNext("test next");
                subscriber.onCompleted();
            }
        });

        /**
         * 观察者
         */
        Observer<String> observer = new Observer<String>() {
            //被观察者调用onCompleted时触发
            @Override
            public void onCompleted() {
                System.out.println("1");
            }
            //被观察者调用onError时触发
            @Override
            public void onError(Throwable e) {
                System.out.println("2");
            }
            //被观察者调用onNext时触发
            @Override
            public void onNext(String s) {
                System.out.println("3");
            }
        };

        /**
         * 订阅
         */
        observable.subscribe(observer);

        /**
         * Action只对某些事件做出响应
         */
        //只对事件序列中的onNext做出响应
        Action1<String> action1 = new Action1<String>() {
            @Override
            public void call(String s) {
                System.out.println("action1--->onNext  "+s);
            }
        };
        //只对事件序列中的onError做出响应
        Action1<Throwable> action11 = new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                System.out.println("action11--->onError  "+throwable.getMessage());
            }
        };
        //只对事件序列中的onCompleted做出响应
        Action0 action0 = new Action0() {
            @Override
            public void call() {
                System.out.println("action11--->onCompleted  ");
            }
        };
        //订阅事件,只处理onNext事件
        observable.subscribe(action1);
        //订阅事件,处理onNext、onError和onCompleted事件
        observable.subscribe(action1,action11,action0);

        /**
        快速创建
         */
        //just( ),将为你创建一个Observable并自动为你调用onNext( )发射数据
        observable =  Observable.just("hello");

        //from()方法将传入的数组或Iterable拆分成具体对象后,订阅之后自动调用onNext方法依次发送,
        // 再发送结束后发送onCompleted结束整个事件
        observable = Observable.from(new ArrayList<>());

        //创建一个按固定时间间隔发射整数序列的Observable,可用作定时器。订阅之后即按照固定时长调用onNext()方法
        Observable<Long> observablelong = Observable.interval(1, TimeUnit.SECONDS);
        observablelong.subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                System.out.println("时长"+aLong);
            }
        });

        //timer()该方法可以在订阅之后延迟发送特定事件
        observablelong = Observable.timer(2000,TimeUnit.MILLISECONDS);

        /**
        变换操作符
         */
        // map将被观察者发送的事件转换为任意类型的事件
        Integer[] ints = {1, 2, 3};
        //map方法把Intger类型转换为String类型
        Observable.from(ints).map(new Func1<Integer, String>() {
            @Override
            public String call(Integer i) {
                //对Integer数据进行处理,转换成String类型返回
                return i + "i";
            }
        }).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                System.out.println(s+"   mapamap");
            }
        });
        //FlatMap操作符将被观察者发送的多个事件进行拆分,分别转换为不同的事件,多线程下顺序不一定
        Observable.just("1,2,3").flatMap(new Func1<String, Observable<?>>() {
            @Override
            public Observable<?> call(String s) {
                String[] split = s.split(",");

                return  Observable.from(split);
            }
        }).subscribe(new Observer<Object>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {
                System.out.println(o);
            }
        });
        //ConcatMap操作符,和FlatMap操作符原理一样,
        区别在于 FlatMap把事件拆分后在发送时,顺序可能和被观察者发送的事件顺序不一样,
        而ConcatMap操作符处理后的事件顺序和被观察者发送事件的顺序是一样的
        
        //buffer操作符将源Observable变换为一个新的Observable,这个新的Observable每次发射一组列表值而不是一个一个发射
        Observable.just(1,2,3,4).buffer(3);
        //filter()操作符加入逻辑判断,返回false表示数据需要被过滤。最后过滤出的数据将加入到新的Observable对象中

        /**
         *线程调度
         *默认情况下,在哪个线程调subscribe(),就会在哪个线程生产事件
         *如果需要切换线程,则需要 Scheduler (调度器)
         * Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。
         * Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。
         * Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。
         *      行为模式和 newThread() 差不多,区别在于 io() 的内部实现是用一个无数量上限的线程池,可以重用空闲的线程,
         * Schedulers.computation(): 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,
         *      这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU
         *对线程进行控制方法
         *subscribeOn(): 指定Observable(被观察者)发布消息所在的线程,或者叫做事件产生的线程。
         *observeOn(): 指定 Observer(观察者)所运行在的线程,或者叫做事件消费的线程
         **/
        Observable.just(1)
                .subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.computation());
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2021-11-26 08:57:51  更:2021-11-26 09:00:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:53:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码