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