Rxjava1.0 学会搬砖。

+MVP?+Dragger?
先暂且不说Dragger注解+MVP 模式。
什么是RxJava?直接上资料
官网:http://reactivex.io/ 这里几乎能找到目前流行的编程语言的基础语法。

RxJava核心模式设计

链式编程,响应式编程是RxJava 设计的初衷,核心设计模式是观察者模式。
先来看看设计模式中的观察者模式,是如何设计的。

来源于网络.png

这是一个很经典的观察者模式的类图。
1.接口Subject, 简单的说是包含了被观察者需要 “做哪些事情”的一个抽象。
2.ConceteSubject类,是对Subject的一个实现,是一个真正被观察者对象(我称之为干活的人)。
3.接口Watcher,是观察者(监视干活的人)的一系列动作抽象。
4.ConcreteWatcher,是观察者接口的实现,以及额外扩展的一系列动作。
那么有了上面的几种角色分工。那他们怎么实现订阅干活呢
<pre>
1.Subject subject = new ConcreteSubject();//得到一个干活的人。
2.Watcher watcher = new ConcreteWatcher();//得到一个监视干活的人。
3.subject.addWatcher(watcher);//干活的人订阅监工
4.subject.notifyWatcher();//干活的人通知我干完了活儿。监工可以去干其他活儿了。
</pre>
简单的看了一下观察者模式如何实现角色分配和关系订阅。这里由(被观察者)干活儿的人主动的去告知监工(观察者)活儿干完的方式,有利于系统性能的提升,优于观察者定时得去获取工人的状态。
<code>
题外话,这个设计模式进一步看,可以运用到公司管理。
学好观察者模式,在公司管理上,以及效率提升会有很大的帮助。那么简单的再进行描述一下,接口是什么。接口就是机制,公司制度。那么执行到员工身上,则变成策略。员工怎么做怎么实现,这个上层的领导不用管。只需告诉我有没有完成活儿,上层领导好去做起其他事情。领导不那么累,员工也在机制内,把控有度。
</code>

细说RxJava

正式进入正题了!!
从RxJava1.0 说起。
先熟悉几种角色。
<pre>
1.Observable. 被观察者(说的fashion一点就是搬砖的)
2.Observer.观察者(监工),这个抽象类由Subscriber继承了。作用差不多
3.obeservable.subscriber(observer).订阅事件(监工和搬砖的签订劳务合同)
</pre>
以上是必须Rxjava实现的标配。既然合同都签订了,那接下来是不是需要干活了。
当然,老板不可能养闲人(除少数G企外)。
那开始干活吧。干活的方式有很多种。不同的工作车间 (多线程),不同的操作方式(Rx操作符)等等。那么公司的规定的制度是什么?也就是抽象出来的接口。Rxjava提供了3种方法
1.onNext();//想监工发出通知。
2.onComplete();//与onError互斥,顺利干完活儿则必走此方法。
3.onError();//与onComplete互斥,干活过程中发生异常,不发送通知给监工,也不走onComplete。
4.onStart();//由Subscriber类扩展而来。在订阅时做一些前期准备。

最简单的干活方式。3步骤

<code>
//1.创建被观察者
Observable<String> myObservable = Observable.create( new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub)
{
sub.onNext("Hello, world!");
sub.onCompleted();
}
});
//2.创建观察者
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
};
//3.订阅
myObservable.subscribe(muSubscriber);
</code>
那么问题来了,在一个打车间干活。突然断电或者出现其他事故,工厂需要立马停止所有工作该怎么办了。(尼玛,停电了。不用写代码了!!!握草,停电了,劳资设计图稿没保存。)
Rxjava 的设计者肯定会想到这样的问题,于是出现了Subscription 接口。

Paste_Image.png

unsubscribe();//取消订阅。
isUnsubscribed();//是否被订阅。

Subscriber 实现了Subscription接口,用于取消订阅。
上面的上个步骤是最简单的,也是最直接的最完整的创建方式。

多线程操作

一个工厂肯定是拥有多车间的,那么如何进行车间切换通信呢。
subscribeOn(指定线程区别).指定搬砖工在某一个线程干活。
observeOn(指定线程).干完活切换到某一个线程。
例子:监工在一个车间的办公室干活(MainThread),搬砖工(也就是我们这些搬砖写代码的)在一个另一个车间干活(OtherThread)。
subscribeOn(OtherThread).observeOn(MainThread)
其中Rxjava,自定义了几种线程模式。

  • Schedulers 几种模式
  • SINGLE;单列线程
  • COMPUTATION; 使用的固定的线程池,大小为 CPU 核数
  • IO;一个无数量上限的线程池,可以重用空闲的线程
  • TRAMPOLINE;排队
  • NEW_THREAD; 创建新线程
  • AndroidSchedulers.mainThread() 指定运行在 Android主线程

操作符

操作符就是我上面提到的策略,干活的方式。(一般由搬砖的人总结出来的经验,当然能够总结这些自然会成为领导。)
1.create,创建一个Obervable
2.just,创建一个Obervable 同时,将集合对象一次发送给Observer
3.map,转换,将数据对象转换成指定的方式,返回一个Obervable
4.timer,定时任务。
5.takeFirst,和take 差不多,取不到不会报异常。
6.takeLast,从后面开始。
7.take,取n个数据的 前面第m个数据take(m)
.....
等等...具体请看。
点击这里,这里总结的比我好太多

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy阅读 5,460评论 7 62
  • 在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github:https://g...
    IT小魔女的故事阅读 804评论 0 1
  • 前言我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard...
    占导zqq阅读 9,159评论 6 151
  • 寝室走了两个人,来了一个新成员,一只小奶猫。白围巾,白手套,包公脸,黑披风。 本来寝室只剩下两个人,晚上回来后只能...
    虎皮高大人阅读 292评论 0 0
  • 阳明说心外无物,其实他还有另外半句话——心内无我。 心外无物,心内无我破了物我对立,确切的说,体悟到了物我一体。何...
    风月心物阅读 3,924评论 1 4