为什么RxJava经常与改造一起使用?
与Rxjava结合使用Retrofit有什么好处?
题
改造已经在后台线程上运行。 那么为什么还需要另一个后台任务RxJava?
我认为最重要的,避免嵌套callback( callback hell
)。
例如)callback地狱(改造)
public interface MyService { @GET("users") Call<List<UserModel>> getUser(); @GET("userinfo") Call<UserInfoModel> getUserInfoById(@Query("id") Integer id); } service.getUser().enqueue(new Callback<UserModel>() { @Override public void onResponse(Call<UserModel> call, Response<UserModel> response) { //process UserModel UserModel data = response.body(); //if you want user infomation from server service.getUserInfo(data.getId()).enqueue(new Callback<UserInfoModel>(){ //... is callback hell!! }); } @Override public void onFailure(Call<UserModel> call, Throwable t) { //error handling } });
例如)避免callback地狱(Retrofit + RxJava)
public interface MyService { @GET("users") Observable<List<UserModel>> getUser(); @GET("userinfo") Observable<UserInfoModel> getUserInfoById(@Query("id") Integer id); } service.getUser() .flatMapIterable(list -> list) .flatMap(user -> service.getUserInfoById(user.getId())) .doOnNext(userinfo -> saveUserInfo(userinfo)).subscribe();
如果您使用RxJava
,则可以使用Observable
来避免这种情况。
额外
上面的代码片段只是一个例子。
事实上, RxJava
包含更多的observe pattern
相关的function。
附加 – Android中事件驱动编程的优点(RxJava)
大多数Android application
都是基于用户或数据interaction
而构build的。 (例如,当交互发生时GUI更新)。 所以我们将这些视为set of events
,基于此devise和构build一个应用程序是非常直观和适合于内部和外部的事件。
要理解这些优点,您首先必须了解您的代码库采用反应式扩展的好处。
-
可组合性和转换
- stream提供了非常可组合的界面。 它允许您执行变换(关于事件的结构和时间)操作,并且基本上与各个stream之间的无缝地交互(例如使得依赖性或利用来自另一个stream的结果/错误)。 尽pipe你可以用callback来实现这个function,但是如果你试图实现一个更复杂的用例,那么这个用例可能就像3个请求一样简单,代码将很快失去可读性。 另一方面,Rx可以让你实现非常复杂的场景,并且看起来很stream畅。
-
线程和asynchronous操作
- Rx可以非常精确地控制哪些线程将用于在stream内的各个点执行工作。 为了在这里指出对比,Retrofit中使用的基本调用方法只是调度工作线程的工作,并将结果转发callback用线程。 当声明为stream时,翻新不会处理线程并将其留给您,只有您可以控制它。
-
Rx库
- 正如您可能已经看到的那样,有无数的库利用Reactive扩展并将各种function实现为stream。 处理您的请求时,您可以轻松利用这些优势
除此之外,还有其他的优点,但是你可以说,反应是非常有利的。 请求是学习使用stream的一个很好的起点,并逐渐在您的代码库中引入越来越多的stream逻辑。
这不是一个替代。 RxJava和Retrofit是一个完美的搭配,这就是为什么在改造的时候原生支持它。
- 在Android中使用Retrofit
- 改造GSON将date从jsonstring序列化为java.util.date
- 使用Retrofit来访问JSON数组
- Retrofit 2.0如何获得反序列化的错误response.body
- 如何使用Retrofit从asynchronouscallback中返回String或JSONObject?
- 使用Retrofit刷新OAuth令牌,无需修改所有调用
- Android Retrofit – onProgressUpdate显示进度通知
- 使用Retrofit 2.0和RxJava获取响应状态代码
- 使用Rxjava Schedulers.newThread()与Schedulers.io()进行改造