RxLifecycle 组件

RxLifecycle 库使得它更容易观察到的订阅绑定到 Android 活动和片段的生命周期。

请记住,忘记取消订阅 Observable 可能会导致内存泄漏,并在系统销毁后保持活动/片段活动事件。

将库添加到依赖项:

// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'

然后扩展 Rx*类:

  • RxActivity / support.RxFragmentActivity / support.RxAppCompatActivity
  • RxFragment / support.RxFragment
  • RxDialogFragment / support.RxDialogFragment
  • support.RxAppCompatDialogActivity

你已经完成了设置,当你订阅 Observable 时,你现在可以:

someObservable
    .compose(bindToLifecycle())
    .subscribe();

如果你在活动的 onCreate() 方法中执行此操作,它将自动取消订阅 onDestroy()

同样的情况发生在:

  • onStart() - > onStop()
  • onResume() - > onPause()
  • onAttach() - > onDetach() (仅片段)
  • onViewCreated() - > onDestroyView() (仅片段)

作为替代方案,你可以在希望取消订阅时指定事件:

来自一项活动:

someObservable
    .compose(bindUntilEvent(ActivityEvent.DESTROY))
    .subscribe();

从片段:

someObservable
    .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
    .subscribe();

你还可以使用方法 lifecycle() 直接侦听生命周期事件来获取可观察的生命周期。

RxLifecycle 也可以直接传递给它生命周期可观察的:

.compose(RxLifecycleAndroid.bindActivity(lifecycle))

如果你需要处理 SingleCompletable,你可以通过在绑定方法后分别添加 forSingle()forCompletable 来实现:

someSingle
    .compose(bindToLifecycle().forSingle())
    .subscribe();

它也可以与 Navi 库一起使用。