今天從原始碼的角度來理解一下volley中部分功能的實現。
新增請求到請求佇列
/**
*將請求新增到請求佇列中
*/public
requestadd(requestrequest)
// 為請求設定順序編號.
request.setsequence(getsequencenumber());
//新增標記
request.addmarker("add-to-queue");
// 如果請求不允許快取,直接新增到網路請求佇列
if (!request.shouldcache())
synchronized (mwaitingrequests)
//新增到相同的請求佇列紅
stagedrequests.add(request);
//新增到集合中
mwaitingrequests.put(cachekey, stagedrequests);
if (volleylog.debug)
} else
return request;}}
給出一張圖總結一下
接下來我們看finish方法
//當請求結束的時候會呼叫此方法
void finish(requestrequest)
synchronized (mfinishedlisteners)
}if (request.shouldcache())
//交給快取佇列去處理
mcachequeue.addall(waitingrequests);}}
}}
快取分發執行緒
public
class
cachedispatcher
extends
thread
/*** 強制分發執行緒退出,這不保證請求佇列中的請求能夠被處理
*/public
void
quit()
@override
public
void
run()
// 從快取中取出快取實體
cache.entry entry = mcache.get(request.getcachekey());
if (entry == null)
// 快取過期,新增到請求佇列
if (entry.i***pired())
// 快取擊中,呼叫request的方法進行資料解析
request.addmarker("cache-hit");
response> response = request.parsenetworkresponse(
new networkresponse(entry.data, entry.responseheaders));
request.addmarker("cache-hit-parsed");
if (!entry.refreshneeded()) else catch (interruptedexception e)
}});
}} catch (interruptedexception e)
continue;}}
}}
從原始碼角度 解決Volley框架亂碼的問題
用volley框架,解析json 發現了亂碼問題。但是伺服器的有不願 意改,只能看原始碼改了。請參考 volley框架有三個方法 stringrequest jsonarrayrequest jsonobjectrequest 發下他們分別都是繼承了jsonrequest 類 然後呢我們又發現 js...
從原始碼的角度理解Android訊息處理機制
與handler共同作用的有looper,messagequeue,message。我麼接下來從原始碼的角度看看整個過程的大概實現。首先說一下每個物件的作用 looper 訊息輪詢循器,不斷的從訊息佇列中取出訊息交給handler處理 messagequeue 訊息佇列,用於儲存從handler傳送...
從原始碼角度來看UVM phase
說到uvm phase我們就知道是uvm乙個很重要的特性,從使用者角度來講,其實就是一些很簡單的應用規則,能夠極大地提公升編碼的效率,簡化 複雜度,提高debug的效率。至於應用可以參看zhangqiang大佬的第五章,這裡就不再贅述。本文就從原始碼的角度來看,uvm的phase是怎麼工作的?之前學...