//可处理多个并发请求,每个网络请求都有以下4个状态,使用两位标记。我们传入的每个index表示一个网络请求。每个网络请求的Index可依次为0,2,4,6.....
public class LoadingState {
public static final int STATE_INIT = 0;
public static final int STATE_LOADING = 1;
public static final int STATE_SUCCESS = 2;
public static final int STATE_FAILD = 3;
public static final int STATE_MASK = 3;
public static int resetState(int loadingRecord,int index){
loadingRecord = loadingRecord&(~(STATE_MASK<<index));
return loadingRecord;
}
public static int startLoading(int loadingRecord,int index){
loadingRecord = resetState(loadingRecord, index);
loadingRecord = loadingRecord | (STATE_LOADING << index);
return loadingRecord;
}
public static int loadFinished(int loadingRecord,int index,boolean flag){
loadingRecord = resetState(loadingRecord, index);
int result = flag ? STATE_SUCCESS :STATE_FAILD;
loadingRecord = loadingRecord | (result << index);
return loadingRecord;
}
public static int getLoadingState(int loadingRecord,int index){
return (loadingRecord >> index) & STATE_MASK;
}
public static boolean isLoading(int loadingRecord){
boolean result = false;
for(int i =0;i<Integer.SIZE/2;i++){
int loadingState = (loadingRecord>>(i*2)) & STATE_MASK;
if(loadingState == STATE_INIT)
{
continue;
}
result = loadingState == STATE_LOADING;
if(result){
break;
}
}
return result;
}
}
loadingRecord初始化为0, A请求的index为0,B请求的index为2.
A请求发起的时候调用LoadingState.startLoading(loadingRecord,0);
B请求发起的时候调用LoadingState.startLoading(loadingRecord,2);
A请求完成的时候调用LoadingState.loadFinished(loadingRecord,0,true);
判断某个请求的状态,调用getLoadingState方法。
往往页面有多个请求,需要判断是否处于加载状态,调用isLoading方法,待所有请求都结束,再隐藏正在加载的提示,或进行后续流程。