1. 程式人生 > >如何升級到RxAndroid 1.0

如何升級到RxAndroid 1.0

原文連結

最近很多人問我:RxAndroid在搞什麼鬼?

事實上市,RxAndroid之前的版本確實是有點換亂,因此最近進行了一次大得重構。這裡有詳細的說明,概括來說就是:

從頭開始對RxAndroid進行模化的改造,讓這個庫變成一個可服用的,可組合的模組。

這個目標已經達成,但是如果你升級到1.0,你可能會很奇怪:東西都跑到哪裡去了,如何才能讓我的程式碼通過編譯?

RxAndroid

AndroidSchedulers 是RxAndroid中唯一保留下來的,但是一些方法簽名已經變了。

遷移部分

WidgetObservableViewObservable 被打包進了

RxBinding專案中,並且做了一些改進。

LifecycleObservable 遷移到了RxLifecycle專案中。另外需要注意的是,這裡進行了一些相對比較大幅度的重構,所以使用的時候請參考一下修改日誌。

ContentObservable.fromSharedPreferencesChanges() 遷移到了rx-preferences專案。

刪除部分

AppObservable 連同它的bind方法已經被完全刪除掉了。AppObservable本身有很多問題:

  • AppObservable嘗試來做自動unsubscribe,但是僅僅是在Activity或者Fragment已經paused之後Observable再發出一個事件,才會觸發自動unsubscribe。也就是說,如果Activity或者Fragment如果沒有paused,一個不會complete的Observable將永遠不會被unsubscribe。

  • AppObservable被設計用來在pause之後避免繼續受到訊息,但是因為HandlerScheduler的一個bug,導致某些場景存在缺陷。

  • AppObservable自動呼叫了observeOn(AndroidSchedulers.mainThread()),不管你是不是想在主執行緒這麼做。

換句話來說,AppObservable並沒有做到它所描述的功能,它的可定製性也比較差,並且還會有一些非期望的副作用。

刪除AppObservable的時候,可以這樣做:

手動的處理Subscription(或者使用RxLifecycle),來在適當的時機做unsubscribe。檢查一下你是否需要使用observeOn(AndroidSchedulers.mainThread())。