RxJava尝试取代Handler初探
生活随笔
收集整理的這篇文章主要介紹了
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的。切記切記。
?
轉載于:https://www.cnblogs.com/yanyojun/p/9799449.html
總結
以上是生活随笔為你收集整理的RxJava尝试取代Handler初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring事物回滚遇到的问题
- 下一篇: 个人开源Git地址