zoukankan      html  css  js  c++  java
  • [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(一)

      最近在研究RxJava自定义操作符的实现原理,发现成型的项目案例较少。突然想起在项目中应用的RxLifecycle是使用自定义操作符,便拿来研究了一下。分析之前,跟大家了解一些相关操作符和RxLifecycle工具包的作用。

    RxLifecycle

      用来严格控制由于发布了一个订阅后,没有及时取消,导致Activity/Fragment无法销毁导致的内存泄露。使用方式参考官方github说明,这里不做重点说明。

    RxJava操作符

      这里是稍微重点介绍一下几个操作符,方便对RxLifecycle实现原理的理解。

    1.compose操作符

      组合操作符,创建一个自定义的操作符与Transformer配合使用,将原始Observable进行变换操作、内联其他操作符等。

    2.Transformer

      自定义操作符变换器,实现方式如下:

    public class MyTransformer<T> implements Observable.Transformer<T, T> {
        @Override
        public Observable<T> call(Observable<T> source) {
        
            //定义变换规则
            return source.map(new Func1<T, T>() {
                @Override
                public T call(T t) {
                    return t;
                }
            }).subscribeOn(Schedulers.io());
        }
    }
    

    3.BehaviorSubject

      BehaviorSubject是Subject的用途之一。Subject在ReactiveX是作为observer和observerable的一个bridge。因为它是一个观察者,所以它可以订阅一个或多个可观察对象,同时因为他是一个可观测对象,所以它可以传递和释放它观测到的数据对象,并且能释放新的对象。

      BehaviorSubject,它一开始就会释放Observable最近释放的一个数据对象,当还没有任何数据释放时,它则是一个默认值。接下来就会释放Observable释放的所有数据。如果Observable因异常终止,BehaviorSubject将不会向后续的Observer释放数据,但是会向Observer传递一个异常通知。

            BehaviorSubject<Integer> subject = BehaviorSubject.create();
            subject.onNext(1);
            subject.onNext(2);
            subject.subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.d(Utils.TAG, "integer : " + integer);
                }
            });
            subject.onNext(3);
    

    执行结果

    04-26 17:20:15.796 16908-16908/qulei.rxjava.demo D/RxJava: integer : 2
    04-26 17:20:15.796 16908-16908/qulei.rxjava.demo D/RxJava: integer : 3
    
  • 相关阅读:
    leetcode二叉树翻转二叉树
    编译PBRTv2
    人最大的快乐不是赚多少钱,而是将一个一个的梦想付诸实现。
    今天终于把工作的事定下了安心开始新的学习
    Ogre学习(二)
    关于游戏引擎关于心情
    Ogitor的安装与使用
    软件随想录
    Lost in Island
    OGRE学习(一)
  • 原文地址:https://www.cnblogs.com/assassin-l/p/5435874.html
Copyright © 2011-2022 走看看