Rxjava1升級Rxjava2踩坑一記


Rxjava1升級Rxjava2坑

共存問題

通常情況下,如果我們希望在一個模塊中既想使用rxjava1又想使用rxjava2,這個時候在運行的時候會出現一下報錯:

... APK META/-INF/rxjava.properies
解決辦法:要么都用rxjava1要么都用rxjava2

出現此報錯的原因大概就是找到某個類的兩個文件入口,因此無法判斷使用哪個方法.

依賴問題

如果有依賴rxjava1,那么升級時在運行時也會出現上述所說的問題:
a、第三方模塊
b、手動導jar包
c、通過compile方式的庫

... APK META/-INF/rxjava.properies
解決辦法:
1、通用的辦法(這種方法基本可以適用於所有的依賴問題,這種方式是在打包的時候排除這些問題件):
packagingOptions{
   exclude 'META-INF/rxjava.properties'
}

2、解決通過compile方式依賴的問題:
找出compile方式的庫中存在依賴rxjava庫(同時也適用於第三方模塊中的compile情況),然后在最后面加上@aa
例如:
compile 'com.darsh.multipleimageselect:multipleimageselect:1.0.4@aar'

其中最大的坑就是Bmob的引用問題(希望Bmob能盡快解決):
由於本人是使用導jar包的方式引入Bmob的,因此我就對這種方式的依賴問題說下自己的觀點。

Bmob的SDK代碼中由於依賴了rxjava1,而rxjava2與rxjava1中的包名於類名有了不小的改變,除非你自己去改了SDK的代碼,否則的話就只能用第一種方式來解除依賴問題。
還有一點就是在Bmob中也依賴了許多庫比如說Annotation,gson,如果我們在編譯運行時候也發現類似上述問題的話,我的解決方式是通過壓縮文件打開bmob的jar包,然后刪除對應的庫的文件夾就好了。

自己對第三方庫和第三方服務的一些看法

這里我想說的一點就是,希望以后第三方庫在升級的時候能兼容下低版本的。
還有第三方服務最好不要於某種庫太過於耦合

rxjava2與rxjava1的一些變化

下面我給出rxjava2的學習博客[給初學者的Rxjava2.0教程][1]

Action -> Consumer

Action0 改成了 Action
Action1 改成了 Consumer
Action2 改成了 BiConsumer
可能是因為3-9沒什么人用的緣故,官方把Action3-Action9給刪除了

Func -> Function

Func 改成 Function
Func2 改稱了 BiFuncation
Func[3 - 9] 改成了 Function[3 - 9]

Observable.OnSubscribe -> ObservableOnSubscribe

Observable.OnSubscribe 改成了 ObservableOnSubscribe

Observable.Transformer -> ObservableTransformer

Observable.Transformer 改成了 ObservableTransformer

Subscription -> Disposable

Subscription 改成了 Disposable

發現一個lambda的優點

由於rxjava1 到 rxjava2的一些類名和類的方法名發生了變化。因此在使用new方式來設置對象的時候,通過要把類名和方法名字一起改了,如果使用的是lambda表達式,那么基本不用改代碼,說多無畏,上代碼:

a.PNG

分析以上代碼我們會發現,除了類名於方法名不同之外,其他都是一個樣

下面是llambda表達式代碼:

捕獲.PNG

看到了么,我們在升級的時解決類名問題,如果兩個版本的類名沒有改,則直接可以通過去除rxjava1的包,導入rxjava2的包就可以搞定了,是不是神操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM