RxJava尝试取代Handler初探

在之前的一篇文章中,我们探究了RxJava的使用方法,详细请看https://www.cnblogs.com/yanyojun/p/9745675.html

根据扔物线大神的描述,如果用一个词来概括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进行实现。

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

 

那RxJava能否可以实现呢?

答案必须是可以的,看下面代码:

 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的。切记切记。

 

posted @ 2018-10-16 17:46  程小白  阅读(2362)  评论(0编辑  收藏  举报