在以前的一篇文章中,咱们探究了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的。切记切记。日志