Android之做人不缺爱Android知识Android开发

rxjava1升级rxjava2填坑AND总结

2017-07-22  本文已影响1208人  黑狗狗哥

共存问题

通常情况下,如果我们希望在一个模块中既想使用rxjava1又想使用rxjava2,这个时候在运行的时候会出现一下报错:

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

出现此报错的原因大概就是找到某个类的两个文件入口,因此无法判断使用哪个方法.

依赖问题

如果有依赖rxjava1,那么升级时在运行时也会出现上述所说的问题:
a、第三方模块
b、手动导jar包
c、通过compile方式的库

... APK META/-INF/rxjava.properies
解决办法:
1、通用的办法(这种方法基本可以适用于所有的依赖问题,这种方式是在打包的时候排除这些问题件):
<code>packagingOptions{
   exclude 'META-INF/rxjava.properties'
}</code>
2、解决通过compile方式依赖的问题:
找出compile方式的库中存在依赖rxjava库(同时也适用于第三方模块中的compile情况),然后在最后面加上@aa
例如:
<code>compile 'com.darsh.multipleimageselect:multipleimageselect:1.0.4@aar'</code>

其中最大的坑就是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<T> 改成了 Consumer
Action2<T> 改成了 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的包就可以搞定了,是不是神操作

上一篇下一篇

猜你喜欢

热点阅读