如何实践MVP+RxJava+Retrofit(1)

为了准备春招,整理了some流行技术,大概是去年5,6月份开始在知乎上看到,后面了解到google早在github上开源了Android开发三种开发模式:MVC ,MVP,MVVM,其中关于这三种对于具体需求来说有不同变体。(吼吼~~有不对的地方请指出==)

  现在要介绍的是MVP+RxJava+Retrofit这种开发模式,那进入正题前,需要了解下前面的三个技术。别着急,一个一个来说?

  MVP模式介绍:

很明显它与MVC模式只有一字之差,如果想快速了解一样东西,比较其特征是最好的方式了。接下来,从下面几方面来说明:

在原理结构上看:

   1MVC-通过控制层C读取视图层V的数据,控制用户输入,向模型层发送数据。其中,视图层根据模型数据创建。视图层与模型层存在强耦合。

   2MVP-视图层V通过P(Presenter)调用模型层M的返回数据返回给视图层V使用。视图层与模型层没有直接联系,降低耦合性,也有利于测试。

在应用角度上看:MVC侧重业务逻辑简单,小项目,搭建项目比较快速,但不利于分层测试;而MVP的话侧重大中型的项目,业务逻辑复杂,搭建项目也快,业务逻辑清晰,利于测试。

  RxJava是啥?

  放上一段官网精辟的定义:一个在Java VM上使用可观测序列的异步的,事件的库程序。

   这个概念是不是云里雾里的?总结两个字功能概述:异步。那它和一般的handler与AsyncTask异步机制有啥不同?

   使用RXjava进行异步操作你会发现不管多复杂的逻辑,Rxjava都能清晰易懂的写出来。

   原理上来说:采用了设计模式观察者模式的变体,为什么这么讲?其实,一般的观察者模式是观察者时时看被观察者,如果被观察者出现符合条件动作,那么观察者立即做出反应。Rxjava采用订阅的方式,告诉被观察者:我需要你的某某状态,你要在它变化的时候通 知我。

   典型的例子是事件点击监听器 OnClickListener,先填上一段代码,很熟悉对吧。对设置 OnClickListener 来说, View 是被观察者, OnClickListener 是观察者,二者通过 setOnClickListener() 方法达成订阅关系,订阅之后用户点击按钮的瞬间,Android Framework 就会将点击事件发送给已经注册的 OnClickListener 。

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"button",Toast.LENGTH_LONG).show();
            }
        });
    RxJava 的观察者模式

   RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer

   与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()

  • onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
  • onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。
  • 在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
  • RxJava 的观察者模式大致如下图:

关于Retrofit的用法

  Retrofit与okhttp共同出自于Square公司,Retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,Retrofit采用Restful简洁的接口设计,让M层清晰访问数据,降低耦合度。

  开发工具使用AndroidStudio通过Gradle引入: 

compile 'com.squareup.retrofit2:retrofit:2.2.0'需要注意:Retrofit 最低要求是 Java 7 或者 Android 2.3。

  参考:rxjava福利:  http://gank.io/post/560e15be2dca930e00da1083

          retrofit用法: http://square.github.io/retrofit/#api-declaration

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏weixuqin 的专栏

爬取网易云音乐评论并使用词云展示

33250
来自专栏HT

基于HTML5快速搭建3D机房设备面板

以真实设备为模型,搭建出设备面板,并实时获取设备运行参数,显示在设备面板上,这相比于纯数值的设备监控系统显得更加生动直观。今天我们就在HT for Web的3D...

339100
来自专栏数据小魔方

左手用R右手Python系列——模拟登陆教务系统

最近在练习R语言与Python的网络数据抓取内容,遇到了烦人的验证码问题,走了很多弯路,最终总算解决了。 在分享这篇文章之前,只想感慨一声,虽然Python拥有...

38580
来自专栏张戈的专栏

全站启用SSL之后,如何兼容不支持https抓取的搜索引擎?

还是在今年 5 月份,百度就跳出来,宣布成为国内首个支持 https 的搜索引擎,结果呢?呵呵... ? 一、案例 ①、抓取诊断 全站开启并强制 https 之...

69860
来自专栏hightopo

基于HTML5快速搭建3D机房设备面板

19530
来自专栏owent

Android NDK undefined reference to ___tls_get_addr 错误

本来看到Android的ndk都开始用gcc4.8和gcc4.9了,而且gcc4.8.1开始支持全部的c++11的特性,我就很happy地用上了。结果出现这么个...

12110
来自专栏ChaMd5安全团队

ssctf2017_WriteUp

ssctf2017_WriteUp From ChaMd5安全团队核心成员 pcat&poyoten&lncken 【 杂项 】 签到 Z2dRQGdRMWZ...

1.1K90
来自专栏腾讯Bugly的专栏

手把手教你逆向分析 Android 程序

很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下。 ? 第一张图是在把代码注入到地...

1.3K180
来自专栏HT

基于HT for Web 3D技术快速搭建设备面板

以真实设备为模型,搭建出设备面板,并实时获取设备运行参数,显示在设备面板上,这相比于纯数值的设备监控系统显得更加生动直观。今天我们就在HT for Web的3D...

20470
来自专栏hightopo

基于HT for Web 3D技术快速搭建设备面板

12120

扫码关注云+社区

领取腾讯云代金券