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 庫一起使用。