如何升级到RxAndroid 1.0

原文出处:http://blog.csdn.net/lzyzsd/article/details/49248235 

最近很多人问我: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())。