如何升級到RxAndroid 1.0
最近很多人問我:RxAndroid在搞什麼鬼?
事實上市,RxAndroid之前的版本確實是有點換亂,因此最近進行了一次大得重構。這裡有詳細的說明,概括來說就是:
從頭開始對RxAndroid進行模化的改造,讓這個庫變成一個可服用的,可組合的模組。
這個目標已經達成,但是如果你升級到1.0,你可能會很奇怪:東西都跑到哪裡去了,如何才能讓我的程式碼通過編譯?
RxAndroid
AndroidSchedulers 是RxAndroid中唯一保留下來的,但是一些方法簽名已經變了。
遷移部分
WidgetObservable 和 ViewObservable 被打包進了
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())。