Rxandroid

作为一个在设计模式中能把MVP发挥的淋漓尽致的框架不去学习感觉真的对不起自己,然后也学点新东西吧,响应式编程,MVP观察者模式,然后使用RxAndroid使我们自己的代码更加简洁

然后昨天看了一个文章说,接口调用频繁使用的话会使你的整个代码看起来非常难以理解,其实想想也是,一个读者看到了你的代码,然后却发现你的代码里充斥着接口回调,哎,这时候

他就需要寻找你这个接口到底回调到了哪里(想想也是这个道理啊);

所以Rx(Android、java)系列很好解决了这个问题,我也是昨天才意识到,因为你可以把所需要执行的任务和任务产生的回调放在同一个地方,然后这个时候,就不需要找来找去了吧

一目了然,任务(耗时任务或者不耗时任务)执行地,任务返回值以及后续的处理都以链式的形式调用;

MVP是啥

即Model view Presenter,

mvp模式可以分离显示层和逻辑层,他们之间通过接口进行通信(好像我之前很多都是用接口通信的诶!冥冥中也有用到mvp模式),降低耦合;

从图中可以看出Presenter分别和Model和view交互,而view和Model之间并没有直接联系

这样随着我们的业务在拓展然后UI改变的话,或者业务逻辑改变UI也有修改的话,如果不分开,那将是一件非常头疼的事,因为你都要两者兼顾,但是现在你只需要

专心专注于UI界面或者业务逻辑的修改了!嗯 ,差不多MVP就是这个好处吧

然后是RxAndroid

rxandroid是rxjava的扩展,然后使用起来的话有提供很多方法给我们进行任务的操作

如just,map,fromCallable等。然后是两个重要的类Observable(事件发布者,被观察者),Observer(观察者,事件订阅者,Subscription(事件订阅者)。

just方法使用

just方法适用于不耗时的任务,同步方法

//事件发布者Observable<String> listObservable;
/**just测试,这里的getString是一个简单的返回String的函数(不贴出来)*/listObservable = Observable.just(getString());listObservable.subscribe(new Observer<String>() {@Overridepublic void onCompleted() {Log.v("test","OnCompleted");}@Overridepublic void onError(Throwable e) {Log.v("test","OnError"+e);}@Overridepublic void onNext(String s) {textView.setText(s);Log.v("test","OnNext:------"+s);}});

如上代码just()方法参数内可以传入一个值,值的类型由事件发布者在定义时规定,应与其保持一致。值获取成功后将通知onNext函数“发布”。

然后我们就可以在onNext函数进行相关操作了。这是简单的使用,然而rxandroid精髓之处在于对线程的操作(虽然我会说,但是感觉还是没有完全理解)

fromCallable()方法

just方法只是一个基础的方法,然而在实际情况中我们会有很多耗时的操作比如,网络请求,比如数据库存储等等,这个时候我们就需要用到异步的方法

fromcallbale用法和just类似,但是多了些控制线程的东西

/**长时间耗时任务测试*/listObservable = Observable.fromCallable(new Callable<String>() {@Overridepublic String call() throws Exception {return getStringLongTime();}});Subscription mtvSubscription = listObservable.subscribeOn(Schedulers.io())  //指定Observable中的方法运行的线程.observeOn(AndroidSchedulers.mainThread())//指定onNext运行线程.subscribe(new Observer<String>() {@Overridepublic void onCompleted() {Log.v("test_CallAble","OnCompled:------");}@Overridepublic void onError(Throwable e) {Log.v("test_CallAble","OnError:------"+e);}@Overridepublic void onNext(String s) {textView.setText(s);Log.v("test_CallAble","OnNext:------"+s);}});

被观察者new了一个Callable的实例,里面运行长时间耗时任务,完成后将异步通知观察者的OnNext方法

subscribOn是指定Observable运行的线程

observeOn是指定观察者OnNext方法所执行的线程

map方法

这里copy一下大神的代码过来,表述了map的使用方法,自行领会 debounce设置延迟时间

mTextWatchSubscription = mSearchResultsSubject.debounce(400, TimeUnit.MILLISECONDS)//设置400毫秒等待时间
    .observeOn(Schedulers.io()).map(new Func1<String, List<String>>() {@Override public List<String> call(String s) { return mRestClient.searchForCity(s); } }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<List<String>>() { @Override public void onCompleted() { }@Override public void onError(Throwable e) { } @Overridepublic void onNext(List<String> cities) {handleSearchResults(cities); }});mSearchInput.addTextChangedListener(new TextWatcher() {@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }@Override public void onTextChanged(CharSequence s, int start, int before, int count) {//有text改变时,调用onNext方法
        mSearchResultsSubject.onNext(s.toString()); }@Override public void afterTextChanged(Editable s) { }
});

图片引用自:Android 源码 设计模式 解析与实战 【何红辉,关爱民著】

部分代码copy自博客园作者:还没好好感受年轻

转载于:https://www.cnblogs.com/fengfenghuifei/p/6186396.html

RxAndroid/java小记相关推荐

  1. Java小记-Vue/ElementUI/Axios(超级无敌认真好用,万字收藏篇!!!!)

    文章目录 Vue/ElementUI/Axios 前言 1 Vue简介 2 Vue的安装 3 Vue的简单使用 4 Vue的指令 4.1 什么是Vue的指令 4.2 Vue常用指令 5 Element ...

  2. Java 小记 — Spring Boot 的实践与思考,互联网 面试官 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 前言 ...

  3. JAVA小记3(第三周)

    目录 面向对象下 1.final关键字: 注:final修饰的成员变量,在未初始化时,JAVA虚拟机不会为final修饰的变量默认初始化,因此必须在声明时立即初始化或者在构造方法中进行初始化. 2.抽 ...

  4. Java小记——异常机制

    目录 运行期异常 编译期异常 throw Erro 错误,严重性问题,你无法去捕获处理 比如内存溢出了 Exception 一般性问题,一般我们可以自己去捕获处理 编译期异常:发生在编译期间,非Run ...

  5. JAVA小记(第一周)

    因为在本学期开学前几周,已经根据课本把Java基础的知识看得差不多了,所以直接进行了图书管理系统的书写,本以为图书管理系统只是一个类之间的继承以及构造函数之间的使用,在之前的学习中也没有学io流,在这 ...

  6. Java小记 —— 日期时间转换问题(相差一小时)

    日期操作的时候经常会在字符串.毫秒和日期对象间转换,而且很多人都使用joda time库进行操作,这就会遇到以下说的问题(相信很多人也遇到了):就是对于某些特殊的日期,转换的时候会报错,或者出现转换不 ...

  7. Java小记-集合类(超级无敌认真好用,万字收藏篇!!!!)

    文章目录 集合类 1 为什么要使用集合类? 1.2数组的特点 1.3 集合类的特点 2 Java中集合类的类结构 3 基于List接口的ArrayList类的使用 3.1 ArrayList的特点 3 ...

  8. Java小记-Spring框架(超级无敌认真好用,万字收藏篇!!!!)

    文章目录 Spring 1 Spring框架概述 1.1 什么是Spring 1.2 Spring的核心技术 1.3 Spring体系结构 2 Spring基于xml的简单使用 3 Spring的依赖 ...

  9. JAVA小记4(第四周)

    这一周因为要准备期末考试,时间不是特别充裕,所以Java学习的进度也不是很快,但也有一些收获. 目录 一.包装类 二.日期类和日历类 三.异常类 一.包装类 Java中,基本数据类型不能创建对象,所以 ...

最新文章

  1. 零基础linux安装hadoop步骤,hadoop的Linux下简单安装步骤
  2. 技术性图文还原那些腿长得能改变地球引力场的TB奇女子
  3. python中文意思k-【Python】 汉字转化汉语拼音pinyin
  4. 云计算竞争愈发激烈,2019年云计算运维前景怎么样?
  5. .NET 程序测试 Java 项目 log4j2 是否存在远程代码执行漏洞
  6. 性能再提升70%?大咖前瞻带你揭开.NET6的神秘面纱!
  7. Dijkstra算法(c++版)
  8. JWT认证不通过导致不能访问视图的解决方案
  9. STL的算法补充笔记-1
  10. android有道翻译api,有道智云自然翻译服务API
  11. 苹果x与苹果xs的区别_x和XS的区别到底在哪里,我来告诉你
  12. Steam帐号被盗怎么办
  13. Vscode 如何配置debug
  14. 基于winsock的局域网聊天室实现
  15. 不属于计算机完成科学特点的是,2019年网络教育统考《计算机应用基础》试卷版练习题2...
  16. LeetCode,无它,唯手熟尔(四)
  17. java自动发送qq_如何定时批量发送qq消息就是帮助我们自动的发送qq消息
  18. 学生宿舍管理系统java课设_JAVA学生宿舍管理系统
  19. Android Activity界面跳转动画讲解
  20. HA RabbitMQ on K8s helm部署实战

热门文章

  1. oracle 禁用外键
  2. [论文笔记]Web service composition using markov decision processes (WAIM 2005)
  3. RPC协议之争和选型要点
  4. flume的安装和部署
  5. SaltStack实战之数据系统-Grains
  6. golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值...
  7. ISE14.7安装教程(转)
  8. 贵阳市全国首部大数据立法《条例》5月起正式实施
  9. Spring学习总结1——bean的生命周期
  10. 继承ViewGroup类