AndroidAutoDispose

一个随Android生命周期事件自动解绑Rxjava订阅的方便工具。

Github: 您的Start将是我前进的动力

前言

上一篇中介绍了一行代码添加Android生命周期监听-AndroidLifeCycle,而这个库开发的很大的一个目的其实是为了解决Rxjava的自动解绑问题的,这一篇中就将介绍如何一行代码在生命周期事件中自动解绑Rxjava的订阅。

概述

应用了 AndroidLifecycle 和 AutoDispose, 随绑定的Fragment, Activity, Context 和View的生命周期事件来自动解绑Rxjava2订阅。

动机

管理Rxjava和Android的生命周期并不是新鲜事,那么为什么要开发这个库呢?
对于这个问题,详细情况可以看Uber 的AutoDispose readme #Motivations.
简单来说,你需要手动添加disposable,或者使用[RxLifecycle][RxLifecycle]。前者并不优雅。而为了正确的使用RxLifecycle,compose()必须离subscribe()调用越近越好,以将之前的操作流包装进来。同时,Single和Completable的解绑将一直引起CancellationException, 你必须总要记得处理这种异常。这些限制让使用它变得有一定风险(特别是在多人项目里面,和不同Rxjava基础的人一同使用时)。
但在这个库中,你只能在订阅的最终阶段才可以监听事件,同时,你也能通过 AutoDisposePlugins.setOutsideLifecycleHandler添加全局的生命事件异常处理,避免了很多使用上的风险。

示例

将 myObservable 的解绑和 myFragment 的 destroy 事件绑定

myObservable    .doStuff()    .to(AndroidRxDispose.withObservable(myFragment, FragmentEvent.DESTROY))   // The scope    .subscribe(s -> ...);

将 mySingle 的解绑和 myView 所在的 Activity 的 pause 事件绑定

mySingle    .doStuff()    .to(AndroidRxDispose.withSingle(myView, ViewEvent.PAUSE))   // The scope    .subscribe(s -> ...);

将 myCompletable 的解绑和 myView 所绑定的 Fragment 的 stop 事件绑定

AndroidLifeCycle.bindFragment(myView, myFragment);myCompletable    .doStuff()    .to(AndroidRxDispose.withCompletable(myView, ViewEvent.STOP))   // The scope    .subscribe(s -> ...);

支持 Rxjava2 Observable, Single, Completable, Maybe, Flowable

下载

compile 'com.github.ykrank:androidautodispose:x.y.z'

x.y.z为版本号,以上图片中的v之后即为最新release版本

Github: 您的Start将是我前进的动力

联系方式

邮箱:ykrank@gmail.com
github : https://github.com/ykrank

更多相关文章

  1. Android(安卓)Touch点击事件源码分析
  2. android 可拖动排序的源码示例
  3. 大家看一下,我对Android的Activity的深入理解
  4. Android(安卓)UI事件处理、focus处理
  5. Android杂谈--Android生命周期
  6. Android事件总线框架设计:EventBus3.0源码详解与架构分析(上)
  7. Android(安卓)Butterknife 框架源码解析(1)——ButterKnife的使用
  8. Android的view重绘
  9. Android开发基础—通过匿名内部类实现按钮点击事件

随机推荐

  1. PHP+Ajax实现文章心情投票功能(代码实例)
  2. php实现微信企业付款到零钱
  3. 关于CentOS6.x/6.5/6.4/6.3/6.2/7.x 64位
  4. 正则表达式中模式修正符作用详解
  5. PHP中的global关键字用法
  6. 深入理解PHP中七个预定义接口
  7. PHP自定义函数+系统函数库(代码示例)
  8. 关于PHP框架中.env文件的加载过程
  9. php中比较两个数组差异的方法
  10. 如何将smarty安装到MVC架构中(代码示例)