[英]How to subscribe to execution of a task using RxJava and Android
我只是將腳趾浸入RxJava中,所以請保持柔和:)到目前為止,我對AsyncTasks還是可以的,但是它變得越來越復雜,我認為我終於偶然發現了我實際上在努力通過簡單的AsyncTasks來滿足的要求。 這是我的用例:
1)我有一個方法(讓它checkNetwork()
),它需要在一個會話中運行一次。 如果先前已運行,則返回並帶有緩存的響應。 否則,它將執行網絡調用,然后根據結果執行另一個。 這些網絡任務都使用OkHttp運行,並且是同步的。 該方法本身從AsyncTask運行。 例如:
public class MyApis{
private boolean mCachedResult;
private boolean mNetworkChecked;
....
public boolean checkNetwork() {
if (mNetworkChecked) {
return mCachedResult;
}
doFirstCall();
// check response, set flags and potentially return
doSecondCall();
// check response, set flags, i.e.
mCachedResult = response.blah
mNetworkChecked = true;
}
public boolean isNetworkChecked(){
return mNetworkChecked;
}
2)我的代碼有多個部分將運行isNetworkChecked()
,如果沒有,請調用checkNetwork()
。 在checkNetwork()
網絡狀況不佳的情況下, checkNetwork()
將花費其甜蜜的時間,而isNetworkChecked()
將返回false。 這將生成並排隊很多AsyncTask。 是的,這些任務將很快解決,但是我在執行器上使用默認隊列大小遇到了問題。
據我了解,RxJava可以幫助我。 我想做的是只運行一次checkNetwork()
,並且如果它已經在運行,而不是對AsyncTasks進行排隊,只需訂閱,等待它完成並根據響應執行我的代碼(即,示例中的mCachedResult
) 。
您可以在RxJava 1.0.15 fromCallable
與replay(1)
結合使用:
Observable<Blah> blahs = Observable.fromCallable(() -> {
doFirstCall();
doSecondCall();
return response.blah;
})
.subscribeOn(Schedulers.io())
.replay(1).autoConnect(0);
blahs.observeOn(AndroidSchedulers.mainThread())
.subscribe(...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.