RxJava操作符实践:1_创建操作之9_start

一、描述

返回一个Observable,它发射一个类似于函数声明的值。

编程语言有很多种方法可以从运算结果中获取值,它们的名字一般叫functions, futures, actions, callables, runnables等等。在Start目录下的这组操作符可以让它们表现得像Observable,因此它们可以在Observables调用链中与其它Observable搭配使用。

Start操作符的多种RxJava实现都属于可选的rxjava-async模块。

rxjava-async模块包含start操作符,它接受一个函数作为参数,调用这个函数获取一个值,然后返回一个会发射这个值给后续观察者的Observable。

注意:这个函数只会被执行一次,即使多个观察者订阅这个返回的Observable。

二、示意图

start

三、示例代码

由于start操作符是属于可选的rxjava-async模块的,所以需要加入下面的依赖:

1
compile 'io.reactivex:rxjava-async-util:0.21.0'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Async.start(new Func0<Integer>() {
@Override
public Integer call() {
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

return 16;
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
System.out.println("onCompleted.");
}

@Override
public void onError(Throwable e) {
System.out.println("onError: " + e.getMessage());
}

@Override
public void onNext(Integer integer) {
System.out.println("onNext: " + integer);
}
});

四、运行结果

延时5秒后,打印出如下信息:

1
2
onNext: 16
onCompleted.

项目代码已上传到Github:https://github.com/SherlockShi/RxJavaBestPractise

五、更多

跟start相关的操作符还有:

  • toAsync
  • startFuture
  • deferFuture
  • fromAction
  • fromCallable
  • fromRunnable
  • forEachFuture
  • runAsync

详情可查阅下面的参考资料。

六、参考资料

ReactiveX官方文档

ReactiveX文档中文翻译

PS:欢迎关注 SherlockShi 个人博客

感谢你的支持,让我继续努力分享有用的技术和知识点!