zoukankan      html  css  js  c++  java
  • RxJava学习总结

    1. 概念

    Rx是微软.NET的一个响应式扩展。Rx借助可观测的序列提供一种简单的方式来创建异步的,基于事件驱动的程序。
    Rx就是一种响应式编程,来创建基于事件的异步程序
    RxJava是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
    RxJava就是一个实现异步操作的库。
    Android 创造的 AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。
    RxJava 的优势:简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。

    2. 观察者模式
    举例:Button.setOnClickListener(new OnClickListener())
    button —— 被观察者
    OnClickListener —— 观察者
    两者通过setOnClickListener达成订阅(Subscribe)关系
    (ContentProvider与ContentObserver之间也存在这样的关系)

    RxJava的观察者模式呢,跟这个差不多,但是也有几点差别:
    (1) Observer与Observable是通过 subscribe() 来达成订阅关系。
    (2) RxJava中事件回调有三种:onNext() 、 onCompleted() 、 onError() 。
    (3) 如果一个Observerble没有任何的Observer,那么这个Observable是不会发出任何事件的。

    RxJava的精髓,Scheduler相当于线程控制器,可以通过它来指定每一段代码运行的线程。

    3. 线程控制 —— Scheduler

    RxJava 已经内置了几个 Scheduler ,它们已经适合大多数的使用场景:

    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 主线程运行。

    参考文章:

    给 Android开发者的 RxJava 详解

     http://gank.io/post/560e15be2dca930e00da1083

    大话RxJava

     http://www.jianshu.com/p/856297523728

     

  • 相关阅读:
    PostgreSQL 安装和使用
    动态sql
    知识储备
    java空和非空判断
    我的第一篇博客
    正式工作:PreparedStatement 参与的
    mysql part2DML(数据操作语言)
    DCL(权限 ,用户)
    DQL(数据查询语言)
    准备工作:Eclipse 导入 mysql连接java 的jar包
  • 原文地址:https://www.cnblogs.com/nicoleTeng/p/7607289.html
Copyright © 2011-2022 走看看