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的。切記切記。日誌

相關文章
相關標籤/搜索