本章介绍DataConnectionTracker对DataConnection手机上网数据连接的管理机制和流程。
一、Android网络整体结构
流程结构图如下:
Android网络中,在底层实现了两个虚拟串口:
- Command命令通道:建立或断开网络连接
- Data数据通道:基于TCP/IP网络通信协议的数据传输
[可分析下基于TCP/IP网络通信协议的数据传输实现机制]
二、DataConnection
该类管理手机上网连接,一个DataConnection代表手机上网的一个数据连接,Android源代码中最大支持9种数据连接类型,但是数据连接在同一时刻仅有一个是有效的。DataConnection是继承于StateMachine类的抽象类,共有6个XXXState内部类:
- DcDefaultState // 默认状态定义
- DcInactiviteState // 不活动的状态定义
- DcActivitingState // 正在激活的状态定义
- DcActiveState // 活动中的状态定义
- DcDisconnectingState // 正在断开的状态定义
- DcDisconnectionErrorCreatingConnection // 断开失败并且正在创建的状态定义
这些内部类均为State的子类,均都有enger、exit和processMessage三个非常重要的方法,这样在切换的过程或是不同的状态情况下,由这三个方法采用不同逻辑进行处理,减少了对状态的繁琐判断,这正是使用State设计模式[将对象的状态封装成一个对象,在不同的状态下,同样的调用执行不同的操作]的优势所在:
private class XXXState extends State {
@Override
public void enter() { // 在状态转换时,进入此状态的操作
......
}
@Override
public void exit() { // 在状态转换时,退出此状态的操作
......
}
@Override
public boolean processMessage(Message msg) {
switch (msg.what) { // 根据Handler消息类型进入不同的分支进行处理
......
}
......
}
}
虽然有6个数据连接状态的内部类,但是只有5个数据连接的状态转换,原因是:在数据连接转换的过程中,DcDefaultState状态对象仅限于其他5个对象之间的转换,详情如下: