RxJava尝试取代Handler初探
在之前的一篇文章中,我們探究了RxJava的使用方法,詳細(xì)請(qǐng)看https://www.cnblogs.com/yanyojun/p/9745675.html
根據(jù)扔物線大神的描述,如果用一個(gè)詞來概括RxJava,那就是“異步”,確實(shí),幾乎上能用Handler+Thread進(jìn)行異步邏輯處理都能用RxJava處理。但是實(shí)際上,Handler在臨床上不僅用于異步通信,看下面一個(gè)例子。
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 37 mHandler.post(() -> { 38 log("mhandler post"); //我們希望后執(zhí)行這部分邏輯 39 }); 40 log("over"); //我們希望先執(zhí)行這部分邏輯 42 }如上述代碼,我們希望over和mHandler post兩個(gè)日志都在主線程中打印出來,其中,先打印over,后打印mHandler post。但是mhandler post的代碼必須在over前面。這個(gè)時(shí)候我們就可以借助Handler進(jìn)行實(shí)現(xiàn)。
Handler會(huì)將要執(zhí)行的代碼放到消息隊(duì)列中,等待主線程空閑的時(shí)候再取出來執(zhí)行。
?
那RxJava能否可以實(shí)現(xiàn)呢?
答案必須是可以的,看下面代碼:
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 }這里有一個(gè)坑需要注意下,必須設(shè)置?.observeOn(AndroidSchedulers.mainThread())?否則的話,還是會(huì)先打印onCompleted,最后打印over的。切記切記。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yanyojun/p/9799449.html
總結(jié)
以上是生活随笔為你收集整理的RxJava尝试取代Handler初探的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring事物回滚遇到的问题
- 下一篇: java美元兑换,(Java实现) 美元