最近有個(gè)需求,判斷三個(gè)Observable哪一個(gè)最先返回(最要是測(cè)試3個(gè)地址的網(wǎng)絡(luò)返回速度)兴枯,本來很簡(jiǎn)單的需求使用merge或amb這樣的其中一個(gè)方法就能判斷哪個(gè)地址最先返回,但有點(diǎn)郁悶的就是這三個(gè)地址返回值是一樣的矩欠,所以用上面的方法不能實(shí)現(xiàn)判斷哪個(gè)Observable最先返回财剖,下面是后來實(shí)現(xiàn)的代碼:
ss_GetUsed_SITE= Observable.combineLatest(
GetRetrofit.getRetrofit(B64.dec(SITE1)).create(ImeiService.class).getSITE1().startWith("begin"),
GetRetrofit.getRetrofit(B64.dec(SITE2)).create(ImeiService.class).getSITE2().startWith("begin"),
GetRetrofit.getRetrofit(B64.dec(SITE3)).create(ImeiService.class).getSITE3().startWith("begin"),
newFunc3() {
@Override
publicString call(String s, String s2, String s3) {
if(s.equals("ok"))
{
returnB64.dec(SITE1);
}
else if(s2.equals("ok"))
{
returnB64.dec(SITE2);
}
else if(s3.equals("ok"))
{
returnB64.dec(SITE3);
}
return null;
}
})
.subscribeOn(Schedulers.io())
.subscribe(newObserver() {
@Override
public voidonCompleted() {
}
@Override
public voidonError(Throwable e) {
}
@Override
public voidonNext(String s) {
if(s !=null)
{
if(ss_GetUsed_SITE!=null)
{
ss_GetUsed_SITE.unsubscribe();
}
if(onlineWebSite==null)
{
onlineWebSite= s;
}
seachByIMEI(null);
}
}
});
現(xiàn)在看到了,使用的是combineLatest方法癌淮,由于combineLatest方法第一次回調(diào)需要三個(gè)Observable全有返回值才能產(chǎn)生躺坟,所以每個(gè)Observable都加入了一個(gè)startwith方法用來產(chǎn)生回調(diào),之后通過Fun中的參數(shù)值就能判斷哪個(gè)Observable最先返回乳蓄。