`
dengzhangtao
  • 浏览: 666649 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

不继承RxAppCompatActivity的情况下使用RxLifeCycle

 
阅读更多
在Android中使用Rxjava时可能会在页面退出时出现内存泄漏的情况,RxLifeCycle就是为此而生,但是作者在sample中写得很简单,只用了继承RxAppCompatActivity的案例讲解它的用法。但是用户在使用过程中,可能会因为继承了别的Activity,不好再继承RxAppCompatActivity,这种情况怎么办呢?

其实作者已经为我们提供了解决方案,只是没有在sample中讲解罢了,下面,我通过两个小例子讲一下在不继承RxAppCompatActivity或RxFragment时如何使用RxLifeCycle:

1. 添加依赖:

compile 'com.trello.rxlifecycle2:rxlifecycle-android-lifecycle:2.2.1'


2. 在AppCompatActivity中使用:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LifecycleProvider<Lifecycle.Event> lifecycleProvider = AndroidLifecycle.createLifecycleProvider(this);
        Observable.interval(1, TimeUnit.SECONDS)
                .doOnDispose(new Action() {
                    @Override
                    public void run() throws Exception {
                        Log.e(TAG, "unSubscribe subscription");
                    }
                })
                .compose(lifecycleProvider.<Long>bindUntilEvent(Lifecycle.Event.ON_DESTROY))
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long num) throws Exception {
                        Log.e(TAG, "running until onDestroy(): " + num);
                    }
                });
    }
}

  
3. 在Fragment中使用:

public class TestFragment extends Fragment {

    private static final String TAG = "TestFragment";

    public TestFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_test, container, false);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LifecycleProvider<Lifecycle.Event> lifecycleProvider = AndroidLifecycle.createLifecycleProvider(this);
        Observable.interval(1, TimeUnit.SECONDS)
                .doOnDispose(new Action() {
                    @Override
                    public void run() throws Exception {
                        Log.e(TAG, "UnSubscribing subscription");
                    }
                })
                .compose(lifecycleProvider.<Long>bindUntilEvent(Lifecycle.Event.ON_PAUSE))
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long num) throws Exception {
                        Log.e(TAG, "Running until onPause(): " + num);
                    }
                });
    }
}
分享到:
评论

相关推荐

    企业法律继承或分割情况的说明材料.pdf

    企业法律继承或分割情况的说明材料.pdf

    在VB6下真正实现继承等

    '本示例旨在向您展示如何在VB6下实现真正的继承,如何使用DyCOMHelper创建类,并使用,它将带您进入VB6背后的COM世界,看看我们的类是如何运行的。 'DyCOMHelper创建的对象的特点: '1、可以像VB6下定义的对象一样去...

    继承和派生的区别以及他们的应用在什么情况下

    继承和派生的区别以及他们的应用在什么情况下继承和派生的区别以及他们的应用在什么情况下继承和派生的区别以及他们的应用在什么情况下

    JavaScript继承

    在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。与它们不同,在JavaScript中要想达到传承公用成员的目的,需要采取一系列措施。更有甚者,JavaScript属于使用原型式继承(我们会向你证明这其实是一...

    java中继承的使用案例

    继承的使用 (1)声明一个人类Person,放入以你的姓名为包名的包中,姓名为private类型属性,性别为protected类型变量,年龄为默认访问类型变量;该类有两个构造方法Person()和Person(姓名,性别,年龄),构造...

    使用C语言实现封装,继承,多态等面向对象的特性

    使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,继承,多态等面向对象的特性使用C语言实现封装,...

    C++不能继承的类

    C++中使类不能继承,文中详细介绍了如何创建一个可以不能被继承的类

    放弃继承权情况说明.docx

    放弃继承权情况说明.docx

    三种继承方式下基类成员对派生类的可见性探讨

    三种继承方式下基类成员对派生类的可见性探讨(公有继承、私有继承、受保护继承)

    JAVA类的定义及继承演示

    定义两个类Dog,SmallDog,SmallDog继承Dog ...继承Dog,不添加任何属性和方法 最后,在测试类中的main方法中生成SmallDog类的对象,访问属性dogName和dogAge,并打印出他们的值;调用dogWalk(),看看效果.

    验证有继承时的调用顺序

    设计程序 验证单继承 多继承 重复继承以及有虚基类时 构造函数与析构函数的调用顺序

    C++ 虚继承对基类构造函数调用顺序的影响

    继承作为面向对象编程的一种基本特征,其使用频率非常高。而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较大。  首先,虚拟继承与...

    C#继承测试C#继承测试

    C#继承测试C#继承测试C#继承测试C#继承测试

    Python语言基础:类的继承.pptx

    派生类可以继承父类的公有成员,但是不能继承其私有成员。类继承的语法为 class 类名(被继承类类名)。 实例:使用类的继承性编写程序,并输出结果。 class A: #父类 def init(self): self.str=[] def ft(self,...

    ogre自己写的框架,不是继承example哦

    这个demo是我看了ogre后自己写的启动框架,不是直接去继承exampleApplication的,这样的话,可以很清楚地知道OGRE的基本原理哈!

    Java面向对象继承.pdf

    使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。 super 与 this 关键字 super关键字:对父类成员的访问;this关键字...

    JS继承.txtJS继承.txt

    JS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txt

    类继承(动态内存分配)

    在类继承中使用动态内存分配需要有一定的技巧,其中包括在基类中使用动态内存分配,在继承类中使用动态内存分配以及在继承类中使用动态内存分配,程序代码演示了这三种情况下的使用方法。

    Python,类的继承到多重继承详解以及如何使用super() – CSDN博客

    类的继承到多重继承详解以及如何使用super继承和issubclass()的使用继承issubclass()多重继承和super()多重继承super() 继承和issubclass()的使用 继承 继承就像是父与子的关系,子类可以从父类内里拿到相同的属性...

    类的继承与派生实验

    1:掌握单继承和多继承下派生类的定义方法,理解基类成员在不同的继承方式下不同的访问属性。 2:正确定义派生类的构造函数与析构函数,理解定义一个派生类对象时构造函数、析构函数的调用次序。 3:理解同名冲突的...

Global site tag (gtag.js) - Google Analytics