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