Square 三剑客

RxJava + Retrofit + Dagger 分析

 

by C.L. Wang

2016.8.22

RxJava

  • Thx@晓天
  • RxJava 是响应式编程框架, 采用观察者设计模式.
  • 核心 Observable (观察者) 和 Subscription (订阅者)
  • 最基础的用法就是使用观察者(Observable), 在特定线程中订阅(subscribeOn)数据的变化, 在主线程中观察(observeOn)变化的数据, 并订阅(subscribe)这些数据, 处理成功(onNext)或失败(onError)的情况.
  •  

 

 

  • 配合Lambda表达式, 更好地发挥链式的处理效果.

 

RxJava

  • Lambda表达式

 

 

 

 

 

 

 

  • 参考:
  • RxAndroid - https://github.com/ReactiveX/RxAndroid
  • Lambda - https://github.com/evant/gradle-retrolambda

Retrofit

  • Retrofit由Square开发, 是类型安全的客户端请求库, OKHttp的进一步封装. Retrofit把REST中API的返回数据转化为Java对象.

 

  • 拦截器与反序列化器

Retrofit

  • Interceptor(拦截器): 在OkHttp处理请求前, 添加公共参数, 或者设置网络信息(HttpLoggingInterceptor).

 

 

Retrofit

  • Deserializer(反序列化器): Gson使用反序列化器过滤不必要的Json返回数据.

 

 

 

 

  • Retrofit使用Host地址, Gson转换器, RxJava适配器, OKHttp客户端, 创建对象.

Retrofit

  • RxJava+Retrofit:
  • Retrofit请求服务器, 调用接口, 返回Observable封装数据, 使用RxJava逻辑进行处理.

 

 

 

  • 参考:
  • RxAndroid - https://github.com/ReactiveX/RxAndroid
  • Lambda - https://github.com/evant/gradle-retrolambda

 

Dagger

  • Dagger已经加入Google I/O, 是Square开发的依赖注入库. Dagger是有向非循环图(Directed Acyclic Graph, DAGger)的简写. 模块(Module)和组件(Component).

 

  • 模块(Module), 即注入实例, @Module @Provides @Singleton
  •  

Dagger

  • 组件(Component): 管理Module, 设置被注入的类. 注意需要重新构建项目, 自动生成DaggerAppComponent.

 

 

 

 

 

 

 

 

  • 插件:  android-apt:1.8
  • ButterKnife: Dagger的简化版, 布局注入工具.

Dagger

  • 初始化

 

 

  • 注入类

 

 

 

  • 注入对象

Dagger

  • 初始化注入

 

 

  • 注入对象

 

 

  • 注意: MainPresenter类不是直接提供, 而是间接注入

Dagger

  • Dagger + Retrofit + RxJava:
  • 注入Retrofit网络请求, 使用RxJava模式执行并处理数据.

 

 

Dagger

  • @Scope

 

 

 

Dagger

  • @Named

 

 

 

总结

  • RxJava + Retrofit + Dagger + MVP

 

  • 优点
  • 简化开发, 代码量较少;
  • 值得信赖, Square与Google推荐;
  • 代码简洁, 结构清晰, 与MVP模式融合;
  • 方便测试, Dagger注入.

 

  • 缺点
  • 学习成本, RxJava的方法较多.
  • 引入依赖, 添加若干开源库.

 

 

 

Thanks

 

参考:

RxJava: http://www.jianshu.com/p/6d1ef9f43cdc

Retrofit: http://www.jianshu.com/p/d6e70141a710

Dagger: http://www.jianshu.com/p/2a26291104e5

 

源码: https://github.com/SpikeKing/SpringRainNews

Square三剑客

By C.L.Wang

Square三剑客

RxJava + Retrofit + Dagger 分析

  • 1,957