在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
在继承法律关系中,放弃继承权是指继承人在继承开始后、遗产分割前,明确表示不接受被继承人的遗产的行为。这通常涉及到一系列的法律程序和文书准备。以下是一些关于如何处理放弃继承权的要点: 1. **声明书的写作...
在多继承的情况下,如果一个派生类同时继承了两个或多个基类,而这些基类又共享了一个共同的基类,那么不使用虚基类会导致"菱形问题",即派生类会有多个同一基类的副本。为解决这个问题,我们可以声明基类为虚基类,...
- 使用控件模板和样式,可以在不直接继承的情况下改变控件的外观和行为。这对于实现跨类调用和交互提供了另一种途径。 7. **MVVM模式** - 在WPF开发中,Model-View-ViewModel (MVVM)模式经常被采用。视图(View)...
为了避免这种情况,通常建议使用虚继承,以确保只有一个实例存在。不过,如果未使用虚继承,那么每个子类都会有自己的基类实例,相应的构造函数和析构函数也会被调用多次。 4. **虚基类**: 虚继承是为了处理多...
公有继承的优点是可以继承基类的公有成员和保护成员,但基类的私有成员不能被继承。 私有继承是指基类中的公有成员和保护成员在派生类中都变成私有成员。基类中的私有成员在派生类中不可访问。私有继承的优点是可以...
总的来说,多重继承在适当的情况下可以增强程序的灵活性,但应谨慎使用,尤其是在涉及到钻石继承的情况。正确理解和应用虚拟继承是避免二义性并解决钻石继承问题的关键。在实际编程中,可以考虑使用接口(interface...
面向对象编程是软件开发中的核心概念之一,它允许我们通过模拟真实世界中的对象来构建复杂的程序。在面向对象编程中,继承是实现...通过这种方式,我们可以在不重复代码的情况下,为每种类型的汽车提供定制化的功能。
特殊情形下的法定继承情况包括以下几点: 1. 如果被继承人的子女先于被继承人去世,其晚辈直系血亲(如孙子女、外孙子女)可代位继承,且不受辈数限制。 2. 丧偶儿媳对公婆、丧偶女婿对岳父母,若尽了主要赡养义务,...
5. **接口实现**:在某些情况下,基础窗体类可能实现了特定的接口,如`IResizable`,这要求子类也必须实现这些接口。子类可以通过`: interface`关键字来实现接口。 6. **构造函数**:子类可以拥有自己的构造函数,...
本文将深入讨论Java中继承的优缺点,以及在特定情况下如何避免使用继承,同时探讨`java.util.Stack`类的设计问题。 继承是面向对象编程中的一个核心概念,主要目的有三个:代码重用、规范制定和实现多态。通过继承...
实验目的:掌握继承与派生的概念,掌握不同的继承方式下基类成员的访问。 实验内容: 1. 定义日期(年、月、日)类 date 和时间(时、分、秒)类 time。 2. 通过公有继承的方式,定义 date 和 time 类派生出的新类...
这在某些情况下非常有用,比如组合多个接口,但可能导致菱形问题(钻石问题),即当一个子类有两个或更多个间接从同一祖先继承的父类时,可能出现二义性。 3. 虚继承:为了解决多继承中的菱形问题,C++提供了虚继承...
默认情况下,Hibernate 使用EAGER加载,这意味着当加载父类时,子类的信息也会一起加载。若希望实现懒加载,可以在继承关系中使用`@OneToMany`或`@ManyToOne`注解并设置`fetch = FetchType.LAZY`。 7. **性能考虑**...
- **利用默认方法**:Java 8引入了接口中的默认方法,可以在不影响现有实现的情况下扩展接口的功能。 ### 3. 使用泛型和集合框架 Java的集合框架和泛型机制提供了强大的类型安全性和代码重用能力。例如,使用`...
由于 Java 语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象。 在 Java 中,数组也可以是同类收集(homogenous collections)或异类收集...
通过继承,子类可以自动获得父类的所有非私有成员,包括字段和方法,这样就可以在不重复编写代码的情况下,创建新的类并实现特定功能。同时,继承还支持多态性,使得代码更加灵活和可扩展。 接下来,我们讨论继承的...
在C++中,设计模式的应用广泛,如策略模式允许在运行时选择算法,适配器模式帮助不同接口间的协作,装饰模式可以在不改变类结构的情况下动态地添加新的行为。这些模式在实际开发中具有很高的实用价值,能够帮助...
子类对象可以被隐式转换为父类对象,而父类对象转为子类对象需要显式强制转换,但这只有在父类对象实际是由子类对象创建的情况下才是安全的。 `this`关键字在当前类的上下文中引用当前对象,而`super`则用于引用...
但要注意的是,C#不支持多重继承,即一个类不能直接从两个或更多个类继承。不过,通过接口,我们可以实现类似的效果。 C#的继承还涉及到方法的覆盖(Override)和隐藏(New)。当子类需要修改父类的方法实现时,...