從原始碼的角度理解Volley

2021-07-14 05:20:07 字數 1799 閱讀 9775

今天從原始碼的角度來理解一下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是怎麼工作的?之前學...