分享

这么理解RxAndroid之一认识RxAndroid

 柠檬冰啡咖 2018-01-05

前言

我目前还在边学别写,极有可能出现很多理解不到位而闹的笑话,请留言指正。
我学习的链接就是上扔物线大哥的给 Android 开发者的 RxJava 详解

什么是RxAndroid?

要说RxAndroid还得先说RxJava,大家可以从这2个词看出来Rx是相同的前缀,毕竟只是android就是java语言。那为何又有点区别呢?目前就我看到的章节只知道android有自己独特的调度MainThreadScheduler(因为android是必须强制在Main线程执行UI操作,复杂的操作要在WorkThread中执行(android api多少+来着?懒的查了))。

屁话说了一堆,那到底什么是RxJava?其实就是一个用来解决异步的框架而已。

RxAndroid能解决什么问题?

同上,解决异步问题。那你会说了,异步在android中有AsyncTask、Handler等机制,需要这个有什么用?
简单来说:以更优雅(更直观、更不烧脑)的方式来写异步。这在复杂的异步程序中用更简单的方式来实现是尤为重要的。如果说你还没有过复杂的异步把自己给绕晕的经历,那只能说你是才入门或者是超凡大师了。

如何通俗地理解RxAndroid?

它其实就是观察者模式的实现。观察者模式无非就是观察者被观察着之间发生的那点儿事。

举个生活中的小例子来描述一下:

老师与学生的关系
我这里将老师比喻为被观察者学生比喻为观察者
设想一个这样的场景:老师在给学生们上课,老师会先让学生打开课本,然后老师噼里啪啦的讲一通,最后老师喊下课!
老师所做的所有动作都是被学生们看在眼里、听在耳里、记在脑子里的,所以假设是学生们一直在观察老师的所有动作,这么就理解了老师是被学生观察的对象,那老师就是被观察者,学生就是观察者
理解了如上过程,我们再想一下:

  • 老师如果说了句“打开第XX页”,那么学生是否就按老师说的做了?
  • 老师如果在黑板上写下了XX结论或答案,那么学生是否就有可能记在课本或其他笔记中了?
  • 老师如果一不小心滑倒了,那么是否有学生就会笑出声来?

其实这些动作都是老师做出来后,学生根据老师的表现或者指令来完成相应的动作?当然,学生们也可能对老师的某个表现不感兴趣,直接不理睬。

悄悄告诉你:android中为某个按钮设定了onClick等监听事件其实就是观察者模式。按钮就是被观察者,onClickListener就是观察者。当按钮发出点击事件时,onClickListener就会执行对应的动作。

RxAndroid的简单实现

  • 观察者与被观察者在RxAndroid的对应
    观察者-Observer与Subscriber。Subscriber只是拓展了一下Observer的功能,它们本质上还是同一个东西。
    被观察者-Observable。
  • Observer/Subscriber (观察者)的创建
Observer<String> observer = new Observer<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag,"老师说了:"+s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag,"哈哈!下课啦~");
    }

    @Override
    public void onError(Throwable e) {
        //onError之前没提到,可以把它想象成老师被校长紧急召唤去开会了之类的不能继续把课上完的情况。
        //注意:onError一旦触发,onCompleted就不会再触发了。反之亦然~
        Log.e(tag,"什么?老师有事没法完成这节课?咱们继续来斗地主吧,哈哈~");
    }
};

Subscriber<String> subscriber = new Subscriber<String>() {
    @Override
    public void onNext(String s) {
        //同Observer
    }

    @Override
    public void onCompleted() {
        //同Observer
    }

    @Override
    public void onError(Throwable e) {
        //同Observer
    }
};
  • Observable (被观察者)的创建
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("上课!");
        subscriber.onNext("打开课本第19页");
        subscriber.onNext("今天的课后作业是……");
        subscriber.onCompleted();//这个是下课的指令
    }
});
  • Subscribe (订阅)
    订阅其实就是建立关系。
    我们创建了“学生”与“老师”,但他们还互相不认识呢,谁知道那么多老师哪个上我们的课啊?
    这样:
observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);

为什么不是学生订阅了老师?其实是为了流式的写法而已。你可以理解成老师订阅了学生,也就是被观察者订阅了观察者。

这就是RxAndroid!至少大家可以知道RxAndroid是个什么玩意儿了,不会像第一次听别人说的时候认为是什么什么高深莫测的东西了。有点晚了,先写到这。。。写博客真的很耗时间,先对各位博客大神作个揖!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多