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