Rxlifecycle生命周期的管理 配置使用
来源:互联网 发布:游戏源码有什么用 编辑:程序博客网 时间:2024/06/03 13:38
Rxlifecycle生命周期的管理 配置使用
在使用响应式Rx..开发Android时 为了考虑到组件的生命周期防止内存泄露 Rxlifecycle 就提供了很好的解决方案.
开源项目地址 :https://github.com/trello/RxLifecycle
使用时引入库:
compile 'com.trello.rxlifecycle2:rxlifecycle:2.2.1' // If you want pre-written Activities and Fragments you can subclass as providers compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.1'
官网给的 rxlifecycle-sample demo 片段代码
public class MainActivity extends RxAppCompatActivity { private static final String TAG = "RxLifecycleAndroid"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// Specifically bind this until onPause()----------------------------------- Observable.interval(1, TimeUnit.SECONDS) .doOnDispose(new Action() { @Override public void run() throws Exception { Log.i(TAG, "Unsubscribing subscription from onCreate()"); } }) .compose(this.<Long>bindUntilEvent(ActivityEvent.PAUSE)) .subscribe(new Consumer<Long>() { @Override public void accept(Long num) throws Exception { Log.i(TAG, "Started in onCreate(), running until onPause(): " + num); } }); } //----------------以上设置是在生命周期oncreate手动设置 ActivityEvent.PAUSE解绑---------------------------------------------------------------- @Override protected void onStart() { super.onStart(); Observable.interval(1, TimeUnit.SECONDS) .doOnDispose(new Action() { @Override public void run() throws Exception { Log.i(TAG, "Unsubscribing subscription from onStart()"); } }) .compose(this.<Long>bindToLifecycle()) .subscribe(new Consumer<Long>() { @Override public void accept(Long num) throws Exception { Log.i(TAG, "Started in onStart(), running until in onStop(): " + num); } }); }//------------------------this.<Long>bindToLifecycle()以上是自动解绑在onstop里------------ @Override protected void onResume() { super.onResume(); Observable.interval(1, TimeUnit.SECONDS) .doOnDispose(new Action() { @Override public void run() throws Exception { Log.i(TAG, "Unsubscribing subscription from onResume()"); } }) .compose(this.<Long>bindUntilEvent(ActivityEvent.DESTROY)) .subscribe(new Consumer<Long>() { @Override public void accept(Long num) throws Exception { Log.i(TAG, "Started in onResume(), running until in onDestroy(): " + num); } }); }//------------------------ActivityEvent.DESTROY 以上是手动解绑在DESTROY里------------ @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause()"); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy()"); }}
为什么compose(this.bindToLifecycle()) 在onstart执行操作 在onstop 里自动解绑 而不再ondestory 在官方给的demo源码里rxlifecycle-android包里的RxLifecycleAndroid.java
// 计算下一个生命周期事件中取消订阅的对应事件。 Activity------------------ // Figures out which corresponding next lifecycle event in which to unsubscribe, for Activities private static final Function<ActivityEvent, ActivityEvent> ACTIVITY_LIFECYCLE = new Function<ActivityEvent, ActivityEvent>() { @Override public ActivityEvent apply(ActivityEvent lastEvent) throws Exception { switch (lastEvent) { case CREATE: return ActivityEvent.DESTROY; case START: return ActivityEvent.STOP; case RESUME: return ActivityEvent.PAUSE; case PAUSE: return ActivityEvent.STOP; case STOP: return ActivityEvent.DESTROY; case DESTROY: throw new OutsideLifecycleException("Cannot bind to Activity lifecycle when outside of it."); default: throw new UnsupportedOperationException("Binding to " + lastEvent + " not yet implemented"); } } };// 计算下一个生命周期事件中取消订阅的对应事件。 Fragment-------------- // Figures out which corresponding next lifecycle event in which to unsubscribe, for Fragments private static final Function<FragmentEvent, FragmentEvent> FRAGMENT_LIFECYCLE = new Function<FragmentEvent, FragmentEvent>() { @Override public FragmentEvent apply(FragmentEvent lastEvent) throws Exception { switch (lastEvent) { case ATTACH: return FragmentEvent.DETACH; case CREATE: return FragmentEvent.DESTROY; case CREATE_VIEW: return FragmentEvent.DESTROY_VIEW; case START: return FragmentEvent.STOP; case RESUME: return FragmentEvent.PAUSE; case PAUSE: return FragmentEvent.STOP; case STOP: return FragmentEvent.DESTROY_VIEW; case DESTROY_VIEW: return FragmentEvent.DESTROY; case DESTROY: return FragmentEvent.DETACH; case DETACH: throw new OutsideLifecycleException("Cannot bind to Fragment lifecycle when outside of it."); default: throw new UnsupportedOperationException("Binding to " + lastEvent + " not yet implemented"); } } };
以上的意思是在oncreate()中订阅 ondestory()停止发射…..以此类推………………
配合retrofit 用法
Retrofit retrofit = new Retrofit.Builder().baseUrl(url).addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build(); biz = retrofit.create(IBiz.class);biz.courselist("小猫").compose(this.<CourseList>bindToLifecycle()). subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<CourseList>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull CourseList courseList) { } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } });
阅读全文
0 0
- Rxlifecycle生命周期的管理 配置使用
- RxAndroid之app的生命周期管理RxLifecycle
- Rxlifecycle使用
- 关于Android—>rxlifecycle的简单使用
- Rxlifecycle使用详解
- RxAndroid之Rxlifecycle使用
- RxLifecycle使用浅解
- Rxlifecycle使用详解
- RxAndroid之Rxlifecycle使用
- RxAndroid之Rxlifecycle使用
- RxAndroid之Rxlifecycle使用
- Android打造自己的网络框架----Rxlifecycle的使用
- RxLifecycle使用 解决Rxjava编程的内存泄露问题
- Mvp+Retrofit+Rxjava+RxLifecycle的封装和使用
- 使用TFS2010管理敏捷项目的生命周期-系列指南1 安装配置
- 使用Retrofit和RxJava的生命周期管理
- 使用TFS2010管理敏捷项目生命周期-系列指南2 生命周期管理的内容
- Android 使用RxLifecycle解决RxJava内存泄漏
- 初步认识Tomcat优化
- [bzoj1061][Noi2008]志愿者招募
- 初次使用echars的经历
- java练习题10
- 自顶向下,逐步求精的程序设计方法
- Rxlifecycle生命周期的管理 配置使用
- android按两次back退出程序!
- 【BDTC 2017讲师专访】彭冬:微博商业基础大数据平台(D+)的架构演进
- 你的信息安全吗?——美国Uber大面积信息泄漏事件
- linux 下各errno的意义
- Android:学习AIDL,这一篇文章就够了(上)
- 【译】在Java中,为什么1000 == 1000 返回false,而100 == 100 返回true?
- caffe小记
- WPF-依赖属性