對android 中網(wǎng)絡(luò)請求的分層改造
目的:做到業(yè)務(wù)數(shù)據(jù)相分離
1波桩、http的請求層(數(shù)據(jù)通信層)
主要功能是對web服務(wù)器的請求请敦,包括一些Http Request和Http Response的解析和修改储玫,并且提供調(diào)試工具類撒穷,方便打印對應(yīng)請求的Request和返回到Response裆熙。
偽代碼:
//BaseDispatch 在中間適配偽代碼定義
//dispath方法會有一個K類型來定義唯一,以便調(diào)用之后方便業(yè)務(wù)層進(jìn)行接收
public class HttpRequestManager{
....
單例
....
private BaseDispatch mBaseDispatch;
//url:請求url
public void request(String url,Map<String,Object> params,K id){
T<HttpResponse> response = [http]請求(url,params);
if(mBaseDispatch != null){
mBaseDispatch.dispatch(response,id);
}
}
//設(shè)置中間層適配
public void setDispatch(BaseDispatch dispatch){
mDispatch = dispatch;
}
}
2蛤奥、http中間適配層
因?yàn)閷τ诓煌枨蠓祷氐臄?shù)據(jù)結(jié)果并不相同僚稿,可以用json、xml缅刽、二進(jìn)制字節(jié)流等蠢络。所以需要進(jìn)行對于的適配。
偽代碼:
public interface BaseDispatch{
void dispatch(T<HttpResponse> response,K id);
}
.....
例如
public class JSonDispatch implements BaseDispatch{
public void dispatch(T<HttpResponse> response,K id){
String json = response.getResponse();
//發(fā)送事件廣播出去腕侄,業(yè)務(wù)層可以注冊事件來接收事件廣播
sendEvent(json,id);
}
}
.....
3芦疏、http業(yè)務(wù)層
注冊接收事件的廣播來處理對應(yīng)的http請求
4、需要注意
-K 的設(shè)計(jì)要保證唯一分预,在同一個事件源發(fā)出同樣到請求可用累加計(jì)數(shù)處理
-sendEvent必須保證能及時發(fā)出去薪捍,否則阻塞回造成整個請求卡死
-業(yè)務(wù)層在退出業(yè)務(wù)時候,需要取消注冊的事件處理器凳干。