簡介:
通過源碼谜慌,我們來一步步分析Mapbox地圖引擎如何發(fā)送網(wǎng)絡請求的捏题,這里是基于5.3.0的版本.
在Mapbox源碼分析(2)url解析這篇里我們了解了mapbox如何將自定義的常量字符串解析出它需要的url地址,那么當url解析出來之后應該便是發(fā)送請求了真慢,這里我們看到online_file_source.cpp文件的request()方法看起
這里我們看到當url解析完之后护姆,返回了一個OnlineFileRequest對象搔弄,我們看下它的構(gòu)造方法
這里我們看到它賦值了Impl,resource,callback對象徘铝,并且調(diào)用了impl.add()方法陈辱,我們繼續(xù)看
在這里我們看到它將請求添加到請求集合中奖年,并加調(diào)用request->schedule();繼續(xù)往下看
這里我們看到它判斷了請求執(zhí)行是否有延遲,繼續(xù)往下看
到這里我們看到沛贪,它判斷了請求是否是激活的以及時間是否超限陋守,這里我們看impl.activateOrQueueRequest(this);這行代碼
這里我們看到它根據(jù)請求的數(shù)量將請求進行隊列或者激活處理震贵,這里我們看激活請求方法
到這里我們看到了它調(diào)用了httpFileSource.request()方法,我們繼續(xù)往下看
這里我們看到它實例化了HTTPRequest對象水评,那么我們便看看HTTPRequest對象的構(gòu)造方法
到這里我們看到了它并未做什么處理猩系,只是初始化了一些對象,那么請求是如何發(fā)出的呢中燥?那么我們看看它new的這個javaClass對象是什么吧
static jni::Class<HTTPRequest> javaClass;
原來new的這個對象是java層的HTTPRequest對象寇甸,那么我們回到java層看一下這個類
到這里就看明白了,這里對url進行了一些判斷處理后疗涉,通過OkHttpClient發(fā)出請求的幽纷,既然我們看明白了請求發(fā)送過程,那順便看看拿到請求數(shù)據(jù)之后的處理吧博敬,這里我們看到HTTPRequest覆蓋的onResponse()方法
這里我們看到拿到響應數(shù)據(jù)之后便通過nativeOnResponse()方法傳入底層了友浸,那么我們看看底層對應的函數(shù)
到這里網(wǎng)絡請求的過程便梳理完了