`
dengzhangtao
  • 浏览: 676338 次
  • 性别: 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

    放弃继承权情况说明.docx

    在继承法律关系中,放弃继承权是指继承人在继承开始后、遗产分割前,明确表示不接受被继承人的遗产的行为。这通常涉及到一系列的法律程序和文书准备。以下是一些关于如何处理放弃继承权的要点: 1. **声明书的写作...

    c++程序设计 继承与派生实验(二)

    在多继承的情况下,如果一个派生类同时继承了两个或多个基类,而这些基类又共享了一个共同的基类,那么不使用虚基类会导致"菱形问题",即派生类会有多个同一基类的副本。为解决这个问题,我们可以声明基类为虚基类,...

    WPF继承_子类继承父类,实现跨类调用方法

    - 使用控件模板和样式,可以在不直接继承的情况下改变控件的外观和行为。这对于实现跨类调用和交互提供了另一种途径。 7. **MVVM模式** - 在WPF开发中,Model-View-ViewModel (MVVM)模式经常被采用。视图(View)...

    验证有继承时的调用顺序

    为了避免这种情况,通常建议使用虚继承,以确保只有一个实例存在。不过,如果未使用虚继承,那么每个子类都会有自己的基类实例,相应的构造函数和析构函数也会被调用多次。 4. **虚基类**: 虚继承是为了处理多...

    C++面向对象程序设计习题继承与派生.pdf

    公有继承的优点是可以继承基类的公有成员和保护成员,但基类的私有成员不能被继承。 私有继承是指基类中的公有成员和保护成员在派生类中都变成私有成员。基类中的私有成员在派生类中不可访问。私有继承的优点是可以...

    多重继承(6_7钻石继承问题)_C++_

    总的来说,多重继承在适当的情况下可以增强程序的灵活性,但应谨慎使用,尤其是在涉及到钻石继承的情况。正确理解和应用虚拟继承是避免二义性并解决钻石继承问题的关键。在实际编程中,可以考虑使用接口(interface...

    面向对象之二 继承(多重继承)

    面向对象编程是软件开发中的核心概念之一,它允许我们通过模拟真实世界中的对象来构建复杂的程序。在面向对象编程中,继承是实现...通过这种方式,我们可以在不重复代码的情况下,为每种类型的汽车提供定制化的功能。

    《继承法》中继承顺序和遗产分配.pdf

    特殊情形下的法定继承情况包括以下几点: 1. 如果被继承人的子女先于被继承人去世,其晚辈直系血亲(如孙子女、外孙子女)可代位继承,且不受辈数限制。 2. 丧偶儿媳对公婆、丧偶女婿对岳父母,若尽了主要赡养义务,...

    继承窗体的设计C#源码

    5. **接口实现**:在某些情况下,基础窗体类可能实现了特定的接口,如`IResizable`,这要求子类也必须实现这些接口。子类可以通过`: interface`关键字来实现接口。 6. **构造函数**:子类可以拥有自己的构造函数,...

    java中慎用继承 以及java中的stack的败笔

    本文将深入讨论Java中继承的优缺点,以及在特定情况下如何避免使用继承,同时探讨`java.util.Stack`类的设计问题。 继承是面向对象编程中的一个核心概念,主要目的有三个:代码重用、规范制定和实现多态。通过继承...

    c++继承与派生

    实验目的:掌握继承与派生的概念,掌握不同的继承方式下基类成员的访问。 实验内容: 1. 定义日期(年、月、日)类 date 和时间(时、分、秒)类 time。 2. 通过公有继承的方式,定义 date 和 time 类派生出的新类...

    c++继承分类

    这在某些情况下非常有用,比如组合多个接口,但可能导致菱形问题(钻石问题),即当一个子类有两个或更多个间接从同一祖先继承的父类时,可能出现二义性。 3. 虚继承:为了解决多继承中的菱形问题,C++提供了虚继承...

    jpa/hibernate继承注解

    默认情况下,Hibernate 使用EAGER加载,这意味着当加载父类时,子类的信息也会一起加载。若希望实现懒加载,可以在继承关系中使用`@OneToMany`或`@ManyToOne`注解并设置`fetch = FetchType.LAZY`。 7. **性能考虑**...

    java继承部分课件

    在Java中,继承是通过使用`extends`关键字来实现的。例如,如果我们有一个名为`Animal`的父类,我们可以创建一个新的类`Dog`,让它继承`Animal`,如下所示: ```java public class Animal { // 父类属性和方法 } ...

    在VB6下真正实现继承等

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

    如何在Java中消除实现继承和面向接口编程

    - **利用默认方法**:Java 8引入了接口中的默认方法,可以在不影响现有实现的情况下扩展接口的功能。 ### 3. 使用泛型和集合框架 Java的集合框架和泛型机制提供了强大的类型安全性和代码重用能力。例如,使用`...

    java中的继承(子类调用父类构造方法还不懂).doc

    由于 Java 语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象。 在 Java 中,数组也可以是同类收集(homogenous collections)或异类收集...

    C++类的继承性说明

    在单继承中,一个派生类只能有一个基类,但在多继承的情况下,一个派生类可以从多个基类中继承特性。 标题中提到的"C++类的继承性说明"主要探讨了多重继承的概念,这是一种允许派生类继承多个基类的特性。在实际...

    C++设计模式和继承代价

    在C++中,设计模式的应用广泛,如策略模式允许在运行时选择算法,适配器模式帮助不同接口间的协作,装饰模式可以在不改变类结构的情况下动态地添加新的行为。这些模式在实际开发中具有很高的实用价值,能够帮助...

Global site tag (gtag.js) - Google Analytics