RxJava是一个非常流行的函数式响应式编程库,在Android开发中已经非常流行。刚开始上手会有点困难,但是一旦你明白了,你就再也回不去了;如果你不用RxJava写异步请求,你会觉得各种不爽。本文不打算讨论RxJava的基础知识。如果你不熟悉RxJava,这里有一个很好的教程供你参考《给 Android 开发者的 RxJava 详解》。下面我们开始介绍RxJava最适合使用的四种场景。代码示例基于RxJava1场景一:单请求异步处理由于一些耗时的操作不能在AndroidUI线程中进行,比如网络请求、大文件存储等,所以在开发中我们经常会遇到异步处理.我们最典型的使用场景是RxJava+Retrofit处理网络请求这::更新用户界面,这::显示错误);为了让代码看起来简洁,这里也使用了lambda表达式,updateUI和showError需要在当前类中实现,例如:publicvoidupdateUI(Datadata){//TODOsomething}publicvoidshowError(throwablet){//showerrormsg}场景二:多个异步请求连续调用。这种场景其实很常见。我们用它来编辑用户头像,一般会有三个请求需要连续调用:请求头像上传地址上传头像更新用户信息在平时的代码中,我们需要一步步嵌套回调.代码太长太丑,不易维护。使用RxJava链调用处理代码逻辑会很清晰Observable.just(1).map(this::task1).map(this::task2).map(this::task3).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(this::updateUI,this::showError);刚刚这里发送的固定值1没有什么实际意义,但是我觉得比较有参考意义。您还可以使用Observable.create来创建可观察对象。场景三:多异步请求合并处理有时候在一个项目中,我们会遇到合并多个请求的结果后更新UI的情况。比如在我们的项目中,有一个通知数据是从多个请求地址获取的,然后在APP上展示的需求按时间顺序组合起来。这时候我们可以使用RxJava的zip函数来处理MyServicemyService=retrofit.create(MyService.class);可观察的o1=myService.getNotification1();Observableo2=myService.getNotification2();Observable.zip(o1,o2,this::combiNotification).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(this::updateUI,this::显示错误);publicList
