Rxjava入门
简介
RxJava是一个开源的Rx框架ReactiveX的java版本。
ReactiveX的主要目的是通过一系列Observable组合异步或事件代码。其中使用的是观察者模式。
可以吧Reactive想象成不断向订阅者推送对象的机制,这个推送过程可以是同步的也可以是异步的。
helloworld
下面看一个简单的例子
首先引入rxjava的依赖
//gradle
compile group: 'io.reactivex', name: 'rxjava', version: '1.2.1'
@Test
public void helloworld() {
Observable obs=Observable.from(new String[]{"WORLD","WORLD2"});
obs.subscribe(value-> System.out.println("Hello " + value + "!"));
}
-------输出------
Hello WORLD!
Hello WORLD2!
首先创建了Observable对象,然后在上面订阅了一个subscriber输出observable的内容。
创建Observale
上面helloworld使用固定的值作为observable,可以使用Observable的create方法进行创建内容
@Test
public void create() {
Observable.create(subscriber -> {
IntStream.range(1, 5).forEach(i -> {
if(!subscriber.isUnsubscribed()){
subscriber.onNext("hello" + i);
}
});
if(!subscriber.isUnsubscribed()) {
subscriber.onCompleted();
}
}).subscribe(System.out::println);
}
-------输出------
hello1
hello2
hello3
hello4
上面的例子创建了4个(1-4)对象,Observable的create方法接受一个方法,在方法内部向subscriber推送信息。
subsribler输出得到的值。
上面的代码都是在主线程中运行的,如果想要不阻塞主线程可以在create中新建线程或使用线程池
@Test
public void asyn() throws InterruptedException {
Observable.create(subscriber -> {
new Thread(() -> {
IntStream.range(1, 5).forEach(i -> {
if (!subscriber.isUnsubscribed()) {
subscriber.onNext("hello" + i);
}
});
if (!subscriber.isUnsubscribed()) {
subscriber.onCompleted();
}
}).start();
}).subscribe(obj -> {
System.out.println(obj);
System.out.println(Thread.currentThread());
});
Thread.sleep(1000);
}
-------输出------
hello1
Thread[Thread-0,5,main]
hello2
Thread[Thread-0,5,main]
hello3
Thread[Thread-0,5,main]
hello4
Thread[Thread-0,5,main]
Observable同时也提供了诸多如skip/take/map/zip等流式的转换操作。
Rxjava入门的更多相关文章
- RxJava入门优秀博客推荐
RxJava用了快半年了,现在越来越离不开这个库,从使用到逐渐接触它的背后实现,突然想写点什么关于RxJava的内容.在酝酿如何组织内容的时候,就去看看自己关于RxJava的收藏,发现满满的干货! 1 ...
- 史上最浅显易懂的RxJava入门教程
RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...
- 清晰易懂的RxJava入门实践
导入 我相信大家肯定对ReactiveX 和 RxJava 都不陌生,因为现在只要是和技术相关的网站,博客都会随处见到介绍ReactiveX和RxJava的文章. ReactiveX Reactive ...
- 在android 上 使用 rxjava 入门篇
什么是 rxJava? RxJava is a Java VM implementation of Reactive Extensions: a library for composing async ...
- RxJava入门之路(一)
RxJava接触过蛮长时间了,但是让我说个所以然来还是说不出来,归根结底还是还是理解不够深刻,趁着年底这个时候争取写个系列出来给自己的学习做个记录 注意区分RxJava1.0和2.0的区别,以下默认是 ...
- RxJava入门之路(二)
收集一下能够避免背压的运算符 sample(500, TimeUnit.MILLISECONDS) 定期收集数据,并发送最后一个 throttleFirst(500,TimeUnit.MILLISE ...
- RxJava_ _学了下RxJava
之前就知道有RxJava这玩意,知道这玩意很屌,不过也就止于看看标题,看几段介绍的程度(懒癌害人不浅).这周心血来潮,抽空把之前收藏的 扔物线 大神写的RxJava入门文章看了. http://gan ...
- RxJava的使用
前言 RxJava及RxAndroid比较详细的介绍可以参考该文档<给 Android 开发者的 RxJava 详解> 基本介绍 ReactiveX 及 RxJava使用大部分来自和参考& ...
- Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,RxJava封装,统一对有无网络处理,异常处理, 返回结果问题
本文出处 :Tamic 文/ http://blog.csdn.net/sk719887916/article/details/52132106 Rxjava +Rterofit 需要掌握的几个技巧 ...
随机推荐
- angularJS(7)
服务:AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用.AngularJS 内建了30 多个服务. 最常用的服务:$location 服务, $http 服务 ...
- 关于Telerik RadGridView 数据列拖动后异常的一种情况
目的: 想实现带有复杂表头(ColumnHeader)的列的动态加载,写了一个用户控件. 问题: 动态加载成功了,显示正常,滚动条也正常,但是一旦进行列的拖动操作之后,程序就挂掉了. 解决尝试: 反复 ...
- webpack -p压缩打包react报语法错误处理
前言:在用webpack打包react代码的时候发现一个问题,做一个处理总结. 我的webpack配置: var webpack = require('webpack'); //打包less插件 va ...
- Mac锁屏
http://www.dbform.com/html/2006/192.html 应用程序-实用工具-钥匙锁-菜单栏中的钥匙串访问-偏好设置-选中“在菜单栏中显示钥匙串”
- javaWeb高级编程(1)
十月 24, 2016 10:41:43 上午 org.apache.catalina.core.StandardContext setPath警告: A context path must eith ...
- monodroid 调用 JNI Native 的一些问题
在Android版本开发的过程中,需要使用一些用JNI开发的NDK的native库.这里谈一谈踩到的坑,给大家参考. 虽然java的程序我还算熟悉,但是没有了解过 JNI Native 的开发,一般是 ...
- 文件处理命令:sed
使用:sed [-nefr] actionaction:-i直接修改读取的档案内容,而不是由屏幕输出,-r表示支持延伸型正则表达式的语法.动作说明:[n1[,n2]] function n1,n2表示 ...
- 基础3.Jquery操作Dom
1 内部插入节点 <body> <ul id="city"> <li id="bj" name=&qu ...
- IOS UIWebView 下拉刷新功能的简单实现
1.运行效果图 2.swift 代码的实现 import UIKit class RefreshWebViewController: UIViewController,UIScrollViewDele ...
- Ansible-playbook批量部署,更新war脚本,可以再完善----后续再update
- name: install tomcat admin hosts: all sudo: True vars: war_file: /root/test.war tomcat_root: /data ...