rxlifecycle 框架的使用

原由:实际的项目中会出现很多订阅关系,那么取消订阅的代码也就越来越多。造成了项目很难维护。所以我们必须寻找其他可靠简单可行的方式,也就是下面要介绍的。
  • github地址: https://github.com/trello/RxLifecycle

  • 在android studio 里面添加引用
    compile 'com.trello:rxlifecycle-components:0.6.1'

  • 让你的activity继承RxActivity,RxAppCompatActivity,RxFragmentActivity
    让你的fragment继承RxFragment,RxDialogFragment;下面的代码就以RxAppCompatActivity举例

  • bindToLifecycle 方法
    在子类使用Observable中的compose操作符,调用,完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。

[html] view plaincopy
  1. public class MainActivity extends RxAppCompatActivity {
  2. TextView textView ;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. textView = (TextView) findViewById(R.id.textView);
  8. //循环发送数字
  9. Observable.interval(0, 1, TimeUnit.SECONDS)
  10. .subscribeOn( Schedulers.io())
  11. .compose(this.<Long>bindToLifecycle())   //这个订阅关系跟Activity绑定,Observable 和activity生命周期同步
  12. .observeOn( AndroidSchedulers.mainThread())
  13. .subscribe(new Action1<Long>() {
  14. @Override
  15. public void call(Long aLong) {
  16. System.out.println("lifecycle--" + aLong);
  17. textView.setText( "" + aLong );
  18. }
  19. });
  20. }
  21. }
  • 上面的代码是Observable循环的发送数字,并且在textview中显示出来
    1、没加 compose(this.<Long>bindToLifecycle()) 当Activiry 结束掉以后,Observable还是会不断的发送数字,订阅关系没有解除
    2、添加compose(this.<Long>bindToLifecycle()) 当Activity结束掉以后,Observable停止发送数据,订阅关系解除。

  • 从上面的例子可以看出bindToLifecycle() 方法可以使Observable发布的事件和当前的Activity绑定,实现生命周期同步。也就是Activity 的 onDestroy() 方法被调用后,Observable 的订阅关系才解除。那能不能指定在Activity其他的生命状态和订阅关系保持同步,答案是有的。就是bindUntilEvent()方法。这个逼装的好累!

  • bindUntilEvent( ActivityEvent event)

    • ActivityEvent.CREATE: 在Activity的onCreate()方法执行后,解除绑定。

    • ActivityEvent.START:在Activity的onStart()方法执行后,解除绑定。

    • ActivityEvent.RESUME:在Activity的onResume()方法执行后,解除绑定。

    • ActivityEvent.PAUSE: 在Activity的onPause()方法执行后,解除绑定。

    • ActivityEvent.STOP:在Activity的onStop()方法执行后,解除绑定。

    • ActivityEvent.DESTROY:在Activity的onDestroy()方法执行后,解除绑定

      [html] view plaincopy
      1. //循环发送数字
      2. Observable.interval(0, 1, TimeUnit.SECONDS)
      3. .subscribeOn( Schedulers.io())
      4. .compose(this.<Long>bindUntilEvent(ActivityEvent.STOP ))   //当Activity执行Onstop()方法是解除订阅关系
      5. .observeOn( AndroidSchedulers.mainThread())
      6. .subscribe(new Action1<Long>() {
      7. @Override
      8. public void call(Long aLong) {
      9. System.out.println("lifecycle-stop-" + aLong);
      10. textView.setText( "" + aLong );
      11. }
      12. });

经过测试发现,当Activity执行了onStop()方法后,订阅关系已经解除了。

rxlifecycle 框架的使用相关推荐

  1. RxJava 和 RxAndroid 三(生命周期控制和内存优化)

    前言:对Rxjava.Rxandroid不了解的同学可以先看看 RxJava 和 RxAndroid RxJava 和 RxAndroid 二(操作符的使用) RxJava使我们很方便的使用链式编程, ...

  2. 一款最流行的MVPArms MVP快速集成框架Retoift,Okhttp,RxCache,Gson,RxLifeCycle, Dagger2,Rxjava,ImageLoader

    今年的Android技术圈中MVP,Dagger2,Rxjava,Retrofit这些词汇非常火,随便打开一个技术论坛都充斥着大量的关于这些技术的文章,Github也充斥着各种以基于MVP+Retro ...

  3. 15类Android通用流行框架

    15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...

  4. Android开发常用开源框架2

    JumpingBeans lottie-android Android-ProgressBarWidthNumber JJSearchViewAnim 一个炫酷的SearchView搜索动画库 Tex ...

  5. mvp架构 java_GitHub - AnthonyCoder/MvpForJava: 一个可直接快速引入的 Java 版本的模块化 MVP 框架...

    使用Java构建的一个模块化的MVP的项目 个人项目仅供学习使用,感谢以下开放Api: Demo简介 该 Demo 更加详细的封装思路,请点击文章如何既装逼又优雅的设计一个模块化的MVP架构 提供给初 ...

  6. Android常用开源框架

    快速索引 框架名称 上榜关键字 1.Retrofit 网络 2.okhttp 网络 3.Butter Knife 代码模板 4.MPAndroidChart 图表 5.glide 图片 6.leakc ...

  7. [Android Pro] 终极组件化框架项目方案详解

    cp from : https://blog.csdn.net/pochenpiji159/article/details/78660844 前言 本文所讲的组件化案例是基于自己开源的组件化框架项目 ...

  8. Android 2018优秀开源框架整理收藏

    中级.高级.资深工程师 知其然知其不可然 <框架百大排行榜>里所提到的流行词.流行术语--使用能力.融会贯通其原理.讲解框架能力的高低,将让你不断的在这三个级别徘徊: 会有意识的合并榜单里 ...

  9. 2018年android常用的框架介绍

    转载地址:http://blog.csdn.net/RuingMan/article/details/73546718 http://www.cnblogs.com/jincheng-yangchao ...

最新文章

  1. 前端之css基础学习(更正版)
  2. spark on yarn 完全分布式_Apache Spark探秘:三种分布式部署方式比较
  3. 一图解明Android Studio项目文件结构各部分作用
  4. html表格转换为csv,python实现将html表格转换成CSV文件的方法
  5. 再想想-----***
  6. Linux学习总结(七十四)自动化运维之ansible
  7. 应用程序不被系统杀死
  8. Linux实战教学笔记29:MySQL数据库企业级应用实践
  9. kmeans算法详解与spark实战
  10. 多个PDF合并后页面大小不一
  11. linux tracker服务器搭建,linux 下 BT Tracker服务器搭建
  12. ads1115的程序,不知道问题出在哪里,一直读出数据都是0。大佬们帮忙看看,感激不尽
  13. LINUX下更新flash
  14. hpgs2wnd.exe
  15. 阿里云被攻击的处理方法
  16. HTML5 table表格合并单元格和合并边框
  17. 如何求地球上两点之间的最短距离_例谈平行线上两动点之间距离最短问题
  18. 【npm】npm发布测试(beta)版和正式版
  19. 微信小程序轮子 - 调起摄像头拍照并在页面预览(身份证拍照 / 人像拍照等等)
  20. 逆风飞扬 吴士宏_打工女皇吴士宏:从初中辍学的患癌小护士到微软中国总经理...

热门文章

  1. 计算机一级b考试理论知识,全国计算机等级考试一级b知识点
  2. linux空指针异常能捕获到吗,一次kernel panic分析--空指针in handle_IRQ_event
  3. n阶完全图边和顶点关系。_正N边型的完全图被分割成几个多边形
  4. 大学必须掌握的计算机技巧,大学生必须掌握的电脑办公技巧
  5. mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式
  6. java readline 实现_基于自定义BufferedReader中的read和readLine方法
  7. 后门怎么写隐蔽java_用Java写黑软-后门篇
  8. 博士申请 | 香港科技大学谢知遥教授实验组招收机器学习全奖博士生
  9. ACM MM 2020视频目标检测挑战赛冠军DeepBlueAI团队技术分享
  10. 图神经网络时代的深度聚类