Rxjava初始,学习笔记

本文从RxJava的基本概念出发,介绍了Observable、Observer等核心组件的作用及其实现方式,并演示了如何利用RxJava进行异步编程。

学习文章 : 给 Android 开发者的 RxJava 详解 

最近在师傅的指引下,学习最近很火的RxJava,面对一个新的知识,在接触,学习,理解的过程中刚开始有点吃力,看到有点复杂就有点放弃的念头,但是这不是一个好的程序员应该有的特质,虽然我还是一个小菜鸟,但是这不是学不下去的理由,现在决定好好消化,做好笔记记录,面对一个知识点,彻底掌握。言归正传,下面记录我对RxJava的 理解:

1、一段解释:a library for composing asynchronous and event-based programs using observable sequences for the Java VM,一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库,概括非常精准,用词讲究,这个需要完全看完RxJava再回头看就有新的理解了。

2、这是一个扩展的观察者模式,于是我又去好好学习了一下java设计模式的观察者模式,观察者模式就是所谓的有观察者与与被观察者,观察者可以通过监听被观察者的状态,当被观察者有行为动作时,能使观察者有相应的行为改变,下面来一段专业解释:有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。jdk中类似的模式有setonclickListener来监控按钮等,但是这是一对一的模式,观察者模式是一对多。推荐文章设计模式 观察者模式 以微信公众服务为例

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

4、基本实现
4.1、创建observer
RxJava的observer接口实现方法:
Observer<String> observer = new Observer<String>() {
    @Override//<span style="font-size:10px;"><span style="color: rgb(34, 34, 34); font-family: 'PT Sans', HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; line-height: 30.4px;">相当于 </span><code style="padding: 0px; margin: 0px; white-space: nowrap; border: 1px solid rgb(225, 225, 225); border-radius: 4px; font-family: Courier, 'Courier New', monospace; color: rgb(34, 34, 34); background: rgb(241, 241, 241);">onClick()</code><span style="color: rgb(34, 34, 34); font-family: 'PT Sans', HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; line-height: 30.4px;"> / </span><code style="padding: 0px; margin: 0px; white-space: nowrap; border: 1px solid rgb(225, 225, 225); border-radius: 4px; font-family: Courier, 'Courier New', monospace; color: rgb(34, 34, 34); background: rgb(241, 241, 241);">onEvent()</code></span>
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override//把没个事件单独处理,并把它们看做一个队列,当不再有新的onNext()发出时,就会触发onCompeted()
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override//事件队列异常
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};
Subscriber  是对  Observer  接口进行了一些扩展,但他们的基本使用方式是完全一样的。只是多了onStart(),unsubscribe()方法。
4.2创建observable(被观察者)
Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("Hello");
        subscriber.onNext("Hi");
        subscriber.onNext("Aloha");
        subscriber.onCompleted();
    }
});

另外还提供一些方法来创建事件队列,例如:
1、just(T...):将传入的参数依次发出来
2、from(T[]):将传入的数组或Iterable拆分成具体对象后,依次发出来。

4.3 subcriber(订阅)
创建了observer和observable之后就需要subscribe来将它们连接起来,代码形式:;observable.subscribe(observer),另外subscribe还支持不完整定义的回调

5、在RxJava的默认机制中,事件的发出与消费都是在一个线程中的,所以如果要实现异步处理,切换线程,就需要用到scheduler(调度器)
scheduler的API(这一段非常经典,忍不住就copy下来)
>Schedulers.immediate() : 直接在当前线程运行,相当于不指定线程。这是默认的  Scheduler
>Schedulers.newThread() : 总是启用新线程,并在新线程执行操作。
> Schedulers.io() : I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的  Scheduler 。行为模式和  newThread()  差不多,区别在于  io()  的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下  io()  比  newThread()  更有效率。不要把计算工作放在  io()  中,可以避免创建不必要的线程。
>Schedulers.computation() : 计算所使用的  Scheduler 。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个  Scheduler  使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在  computation()  中,否则 I/O 操作的等待时间会浪费 CPU。
> 另外, Android 还有一个专用的  AndroidSchedulers.mainThread() ,它指定的操作将在 Android 主线程运行。

示例:

这种使用方式基本就是形成异步操作的一种逻辑,将被创建事件的内容发生在IO线程中,将数字的打印发生在主线程。这就是后台线程取数据,主线程显示的程序策略。

6 变换:就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列
这部分内容在 深入浅出RxJava(二:操作符)有详细讲解,主要就是讲map(),flatmap(),将一个对象转换成另一个对象,其中,
flatmap()更为强大,可以将一个对象转换成observable对象。

暂时就到这里了,后续学习待有时间来更新!


下载代码方式:https://pan.quark.cn/s/a4b39357ea24 HTML大屏展示模板是一种用于设计具有视觉冲击力且内容充实的巨型显示屏应用的设计方案,其应用范围广泛,涵盖了数据分析、监控以及决策支持等多个领域。这些模板通常整合了HTML、CSS、JavaScript等多种技术,尤其借助ECharts等数据可视化工具以达成复杂数据的图形化呈现。以下是对相关技术细节的深入说明: 1. **可视化**:数据可视化是将抽象的数据转化为直观的图像或图表的技术手段。这种技术有助于迅速识别数据中的模式、发展趋势和异常情况,使得非专业背景的人员也能轻松理解复杂的数据信息。在大屏展示场景中,可视化通常包含折线图、柱状图、饼图、热力图、地图等多种图表形式。 2. **大数据**:大数据指的是规模庞大、增长迅速、种类多样且数据密度较低的数据集合。在HTML大屏展示中,大数据的应用旨在支持实时或近乎实时的决策制定,例如监控销售业绩、交通流量、能源消耗等关键性能指标。 3. **HTML**:超文本标记语言(HTML)构成了网页内容的基础结构,用于界定页面的布局和元素。在大屏展示模板中,HTML负责构建页面组件,例如标题、段落、图像以及图表容器等。 4. **CSS**:层叠样式表(CSS)用于调控网页的视觉风格和布局结构。在大屏模板设计中,CSS扮演着核心角色,确保设计的响应性、适应性和美观度,包括设定颜色、字体、间距、动画效果等。 5. **ECharts**:ECharts是由百度研发的一款开源JavaScript数据可视化库,能够支持多种图表类型,如折线图、柱状图、散点图等,并提供了丰富的交互特性。在大屏展示中,ECharts能够助力生成动态且交互式的数据...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值