隨Android生命周期解綁Rxjava訂閱的簡(jiǎn)單流式方法

AndroidAutoDispose

一個(gè)隨Android生命周期事件自動(dòng)解綁Rxjava訂閱的方便工具。

Github: 您的Start將是我前進(jìn)的動(dòng)力

前言

上一篇中介紹了一行代碼添加Android生命周期監(jiān)聽(tīng)-AndroidLifeCycle,而這個(gè)庫(kù)開(kāi)發(fā)的很大的一個(gè)目的其實(shí)是為了解決Rxjava的自動(dòng)解綁問(wèn)題的,這一篇中就將介紹如何一行代碼在生命周期事件中自動(dòng)解綁Rxjava的訂閱。

概述

應(yīng)用了 AndroidLifecycleAutoDispose, 隨綁定的Fragment, Activity, Context 和View的生命周期事件來(lái)自動(dòng)解綁Rxjava2訂閱。

動(dòng)機(jī)

管理Rxjava和Android的生命周期并不是新鮮事,那么為什么要開(kāi)發(fā)這個(gè)庫(kù)呢?
對(duì)于這個(gè)問(wèn)題,詳細(xì)情況可以看Uber 的AutoDispose readme #Motivations.
簡(jiǎn)單來(lái)說(shuō),你需要手動(dòng)添加disposable,或者使用[RxLifecycle][RxLifecycle]。前者并不優(yōu)雅。而為了正確的使用RxLifecycle,compose()必須離subscribe()調(diào)用越近越好,以將之前的操作流包裝進(jìn)來(lái)。同時(shí),Single和Completable的解綁將一直引起CancellationException, 你必須總要記得處理這種異常。這些限制讓使用它變得有一定風(fēng)險(xiǎn)(特別是在多人項(xiàng)目里面,和不同Rxjava基礎(chǔ)的人一同使用時(shí))。
但在這個(gè)庫(kù)中,你只能在訂閱的最終階段才可以監(jiān)聽(tīng)事件,同時(shí),你也能通過(guò) AutoDisposePlugins.setOutsideLifecycleHandler添加全局的生命事件異常處理,避免了很多使用上的風(fēng)險(xiǎn)。

示例

將 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為版本號(hào),以上圖片中的v之后即為最新release版本

Github: 您的Start將是我前進(jìn)的動(dòng)力

聯(lián)系方式

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容