RxJava尝试取代Handler初探

在以前的一篇文章中,咱们探究了RxJava的使用方法,详细请看http://www.javashuo.com/article/p-aflyuaeq-bn.htmlhtml

根据扔物线大神的描述,若是用一个词来归纳RxJava,那就是“异步”,确实,几乎上能用Handler+Thread进行异步逻辑处理都能用RxJava处理。可是实际上,Handler在临床上不只用于异步通讯,看下面一个例子。异步

 1     @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         super.onCreate(savedInstanceState);
37         mHandler.post(() -> {
38             log("mhandler post"); //咱们但愿后执行这部分逻辑
39         });
40         log("over"); //咱们但愿先执行这部分逻辑
42     }

如上述代码,咱们但愿over和mHandler post两个日志都在主线程中打印出来,其中,先打印over,后打印mHandler post。可是mhandler post的代码必须在over前面。这个时候咱们就能够借助Handler进行实现。ide

Handler会将要执行的代码放到消息队列中,等待主线程空闲的时候再取出来执行。post

 

那RxJava可否能够实现呢?spa

答案必须是能够的,看下面代码:线程

 1     @Override
 2     protected void onCreate(Bundle savedInstanceState) {
 3         super.onCreate(savedInstanceState);
18         rx.Observable.empty()
19                 .observeOn(AndroidSchedulers.mainThread())
20                 .subscribe(new Subscriber<Object>() {
21                     @Override
22                     public void onCompleted() {
23                         log("onCompleted");
24                     }
25 
26                     @Override
27                     public void onError(Throwable e) {
28                         log("onError");
29                     }
30 
31                     @Override
32                     public void onNext(Object o) {
33                         log("onNext");
34                     }
35                 });40         log("over");
41 
42     }

这里有一个坑须要注意下,必须设置 .observeOn(AndroidSchedulers.mainThread()) 不然的话,仍是会先打印onCompleted,最后打印over的。切记切记。日志

相关文章
相关标签/搜索