一、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() 的实现如下: