我没有理由在Android中使用RxJava,也没有理由从Android架构组件中使用LiveData.如果以代码的形式解释二者之间的用例和差异,并以示例的形式解释二者之间的差异,这将非常有用.
我没有理由在Android中使用RxJava,也没有理由从Android架构组件中使用LiveData.如果以代码的形式解释二者之间的用例和差异,并以示例的形式解释二者之间的差异,这将非常有用.
Android LiveData是原始观察者模式的变体,添加了活动/非活动转换.因此,它的范围非常有限.
使用Android LiveData中描述的示例,创建一个类来监视位置数据,并根据应用程序状态进行注册和注销.
RxJava提供了更加通用的运算符.让我们假设此可观测对象将提供位置数据:
Observable<LocationData> locationObservable;
可以使用Observable.create()
来映射回调操作来构建可观察对象的实现.当订阅可观察对象时,注册回调,当取消订阅时,取消注册回调.该实现看起来与示例中提供的代码非常相似.
我们还假设,当应用程序处于活动状态时,您有一个发出true的可观测值:
Observable<Boolean> isActive;
然后,您可以通过以下方式提供LiveData的所有功能
Observable<LocationData> liveLocation =
isActive
.switchMap( active -> active ? locationObservable : Observable.never() );
switchMap()
操作员将以流的形式提供当前位置,如果应用程序未激活,则不提供任何内容.一旦你有了liveLocation
个可观察对象,你就可以用RxJava操作符做很多事情了.我最喜欢的例子是:
liveLocation.distinctUntilChanged()
.filter( location -> isLocationInAreaOfInterest( location ) )
.subscribe( location -> doSomethingWithNewLocation( location ) );
它只会在位置发生变化且位置有趣时执行操作.您可以创建类似的操作
RxJava的要点在于,它使用库提供的操作,甚至使用您提供的自定义操作,将控制和计时组合到一个世界中.
LiveData只处理了宇宙中的一小部分,相当于构建liveLocation
个.