一、Android 網絡整體結構
Android網絡結構中,在底層提供兩種虛擬接口:
1)Command命令通道:建立或斷開網絡連接
2)Data數據通道:基於TCP/IP網絡通信協議的數據傳輸
本文重點關注Command命令通道,與CallTracker、ServiceStateTracker類似。
二、DataConnection類
DataConnection(數據連接)在Telephony Frameworks層中用來管理手機上網連接。
一個DataConnection對象代表手機上網的一個數據連接,Android源碼中最大支持9個數據連接類型,但數據連接在同一時刻僅有一個是有效的。類圖如下:
如上,定義6個內部類:
DcDefaultState:默認狀態定義
DcInactiveState:不活動的狀態定義
DcRetryingState:重新請求的狀態定義
DcActivatingState:正在激活的狀態定義
DcActiveState:活動中的狀態定義
DcDisconnectionState:正在斷開的狀態定義
分別實現3個接口:
enter() :在狀態轉換時,進入此狀態的操作
exit() :在狀態轉換時,退出此狀態的操作
processMessage() :此狀態的Handler消息處理
類關鍵方法:
onConnect(ConnectionParams cp) 激活數據連接:
1)初始化變量,如mLastFailCause
2)獲取authType、protocol 參數
3)調用setupDataCall() 發起數據連接
setupDataCall() 發起數據連接:
1)根據判斷,調用mCi.setupDataCall,即Ril.java 的setupDataCall接口
2)getRilDcArbitrator() 返回 IRilDcArbitrator 接口,該接口實現 PS 通話業務的功能,函數在實現該接口的類DefaultRilDcArbitrator中實現
IRilDcArbitrator 接口中定義:
DefaultRilDcArbitrator類中的實現:
mPsCi 是 CommandsInterface 接口的對象;
BaseCommands 類實現 CommandsInterface 接口,BaseCommands implements CommandsInterface;
SimulatedCommands 類繼承 BaseCommands ,SimulatedCommands extends BaseCommands;
mPsCi.setupDataCall() 的實現如下:
unimplemented() 的實現如下: