AndroidAutoDispose
一個(gè)隨Android生命周期事件自動(dòng)解綁Rxjava訂閱的方便工具。
前言
上一篇中介紹了一行代碼添加Android生命周期監(jiān)聽(tīng)-AndroidLifeCycle,而這個(gè)庫(kù)開(kāi)發(fā)的很大的一個(gè)目的其實(shí)是為了解決Rxjava的自動(dòng)解綁問(wèn)題的,這一篇中就將介紹如何一行代碼在生命周期事件中自動(dòng)解綁Rxjava的訂閱。
概述
應(yīng)用了 AndroidLifecycle 和 AutoDispose, 隨綁定的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版本
聯(lián)系方式
郵箱:ykrank@gmail.com
github : https://github.com/ykrank