RxLifecycle使用 解决Rxjava编程的内存泄露问题
来源:互联网 发布:紫川软件招聘 编辑:程序博客网 时间:2024/05/29 15:08
RxLifecycle是什么?
This library allows one to automatically complete sequences based on a second lifecycle stream.This capability is useful in Android, where incomplete subscriptions can cause memory leaks.
通俗的说:可以通过绑定生命周期的方式,来解决内存泄漏的问题
开源地址
rxlifecycle是trello开发的用于解决RxJava引起的内存泄漏的开源框架。传送门
Android studio中的依赖与使用
1.)在build.gradle文件中添加依赖
// RxLifecycle基础库compile 'com.trello.rxlifecycle2:rxlifecycle:2.1.0'// Android组件库,里面定义了例如RxAppCompatActivity、RxFragment之类的Android组件compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
2.)根据不同的需要Activity继承RxActivity ,Fragment继承RxFragment
public class MainActivity7 extends RxActivity { private TextView mTextView; private static final String TAG = "RxLifecycle"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.text); Observable.interval(1, TimeUnit.SECONDS) .doOnUnsubscribe(new Action0() { @Override public void call() { Log.i(TAG, "Unsubscribing subscription from onCreate()"); } }) .subscribe(new Action1<Long>() { @Override public void call(Long num) { Log.i(TAG, "Started in onCreate(), running until onPause(): " + num); } }); } @Override protected void onDestroy() { super.onDestroy(); }}
当activity对象被销毁,而我们的在rxjava中执行一些耗时的操作(例如:网络访问–>成功获取数据–>刷新UI;文件的存储等),就会造成内存泄露的现象。
3.)使用bindToLifecycle()的方式 —->绑定生命周期,自动取消订阅
完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。
Observable.interval(1, TimeUnit.SECONDS) .doOnUnsubscribe(new Action0() { @Override public void call() { Log.i(TAG, "Unsubscribing subscription from onCreate()"); } }) //Note:bindToLifecycle的自动取消订阅示例,因为是在onStart的时候调用,所以在onStop的时候自动取消订阅 .compose(this.<Long>bindToLifecycle()) .subscribe(new Action1<Long>() { @Override public void call(Long num) { Log.i(TAG, "Started in onCreate(), running until onPause(): " + num); } }); }
4.)使用bindUntilEvent()方式—>手动设置取消订阅的时机
使用CREATE、START、 RESUME、PAUSE、STOP、 DESTROY分别对应生命周期内的方法。使用bindUntilEvent指定在哪个生命周期方法调用时取消订阅。
Observable.interval(1, TimeUnit.SECONDS) .doOnUnsubscribe(new Action0() { @Override public void call() { Log.i(TAG, "Unsubscribing subscription from onCreate()"); } }) //Note:bindUntilEvent手动设置在activity onDestroy的时候取消订阅 .compose(this.<Long>bindUntilEvent(ActivityEvent.DESTROY)) .subscribe(new Action1<Long>() { @Override public void call(Long num) { Log.i(TAG, "Started in onCreate(), running until onPause(): " + num); } }); }
参考:RxAndroid之Rxlifecycle使用
阅读全文
1 0
- RxLifecycle使用 解决Rxjava编程的内存泄露问题
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- Android 使用RxLifecycle解决RxJava内存泄漏
- RxLifecycle解决RxJava内存泄漏
- Android性能优化之利用Rxlifecycle解决RxJava内存泄漏
- Android性能优化之利用Rxlifecycle解决RxJava内存泄漏
- Android性能优化之利用Rxlifecycle解决RxJava内存泄漏
- Android性能优化之利用Rxlifecycle解决RxJava内存泄漏
- Mvp+Retrofit+Rxjava+RxLifecycle的封装和使用
- Android使用Handler造成的内存泄露问题的解决
- 解决Office2007使用内存泄露问题
- 解决ie6内存泄露的问题
- spark内存泄露的问题及解决
- gradient descent梯度下降详解
- LeetCode 81 Search in Rotated Sorted Array II (Python详解及实现)
- Longest Ordered Subsequence(LIS)
- stm32位带
- 练习1
- RxLifecycle使用 解决Rxjava编程的内存泄露问题
- ios下jquery document.on() 无效 ,设置 cursor: pointer;
- 【LCM】
- 分布式计算开源框架Hadoop
- linux使用Inotify监控目录或者文件状态变更
- Canvas的3种渲染模式
- 会员信息管理(总结)
- Android开发--全局类的实现(用于保存使用的全局变量)
- jQuery选择器