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))
如果你需要處理 Single
或 Completable
,你可以通過在繫結方法後分別新增 forSingle()
或 forCompletable
來實現:
someSingle
.compose(bindToLifecycle().forSingle())
.subscribe();
它也可以與 Navi 庫一起使用。