Android 网络整体架构

Android 网络中,在底层实现两个虚拟串口:

1、Command 命令通道:建立或断开网络建立

2、Data 数据通道:基于TCP/IP 网络通信协议的数据传输

DataConnection 在Telephony Frameworks 层中用来管理手机上网连接

Android 最大支持9个数据连接类型,但同一时刻仅有一个是有效的;

DataConnection 继承 StateMachine 类(State设计模式)的抽象类,其子类 GsmDataConnection 和 CdmaDataConnection;

定义了6个内部类:

DcDefaultState  默认状态定义,作为其他5个状态对象的父对象

DcInactiveState  不活动的状态定义,作为初始化状态,在不使用、断开数据连接、数据连接异常时回到此状态

DcActivatingState  正在激活的状态定义

DcActiveState  活动中的状态定义,连接网络成功

DcDisconnectingState  正在断开的状态定义

DcDisconnectionErrorCreatingConnection  断开失败并且正在创建的状态定义,连接网络失败

这些内部类都有enter、exit 和 processMessage 三个重要方法

enter :在状态转换时,进入此状态的操作

exit :在状态转换时,退出此状态的操作

processMessage :根据Handler 消息类型进入不同的分支进行处理

DataConnection 类关键属性

ApnSetting  mApnSetting  APN 配置信息

PhoneBase  phone  Phone对象

LinkProperties  mLinkProperties  网络连接的基本信息

HashMap<Integer, FailCause>  sErrorCodeToFailCauseMap  记录所以数据连接失败原因

FailCause  lastFailCause  记录最后一次数据连接失败原因

DcXXXState  mXXXState  数据连接的6中状态

DataConnection 抽象类关键方法

StateMachine 状态机,实现了State 设计模式的应用

State 设计模式将对象的状态封装成一个对象,在不同状态下,同样的调用执行不同的操作;

Context 上下文维护对个State 子类的实例,每个实例实现该状态的操作;Context只需固定调用State.Handle方法,交由ConcreteState对象的Handle处理;

StateMachine 类共有6个内部类:

ProcessedMessageInfo  已处理的消息实体类

ProcessedMessages  已处理的消息类

SmHandler  消息处理核心类,负责Handler 消息的发生和接收用来管理和更新State对象

HaltingState  关闭的状态类

QuittingState  正在退出的状态类

StateInfo  状态实体类型

StateMachine 运行过程:

addState  增加管理的状态对象

setInitialState  设置状态的初始化对象

start  开始运行状态机

addState 增加管理的状态对象,这些状态对象之间存在着树状关系,一个State对象不会处理的消息交由父节点处理,这是职责链设计模式

StateInfo  addState(State  state,  State  parent)

SmHandler 内部类作为自定义的Handler 消息处理对象

  private DataConnection(PhoneBasephone, Stringname, intid,
419                DcTrackerBase dct, DcTesterFailBringUpAll failBringUpAll,
420                DcController dcc) {
441
442        addState(mDefaultState);
443            addState(mInactiveState, mDefaultState);
444            addState(mActivatingState, mDefaultState);
445            addState(mRetryingState, mDefaultState);
446            addState(mActiveState, mDefaultState);
447            addState(mDisconnectingState, mDefaultState);
448            addState(mDisconnectingErrorCreatingConnection, mDefaultState);
449        setInitialState(mInactiveState);  //设置初始化的State对象
450
451        mApnContexts = new ArrayList<ApnContext>();
452        if (DBG) log("DataConnection constructor X");
453    }

start() 启动方法的调用则是在子类GSMDataconnection和CDMADataconnection 类完成

APN (Access Point Name) 是通过手机上网必现配置的一个参数,决定手机通过哪种接入方式访问网络;

启动手机后,所以的APN 配置信息都会保存在telephony.db 的SQLite 的数据库表名未carriers 的表中;

adb  pull  /data/data/com.android.providers.telephony/databases/telephony.db

telephony.db 数据库文件carriers 表:

name  APN 配置名称

numeric  运营商编号

apn  APN 接入点,比如中国移动有两个接入点:cmwap 和 cmnet

proxy  代理服务器地址

port  端口号

mmsproxy  彩信代理服务器地址

mmsport  彩信代理服务器端口号

mmsc  彩信接入服务地址

type  APN 接入类型

Android 支持的 APN 类型,最多支持5种 APN 类型:

default  默认数据类型,即浏览器、Email等手机普通上网数据连接

mms  发送和接收彩信使用的数据连接

supl  支持AGPS 的数据连接

dun(dial-up-network)  拨号连接

hipri  扩张

以上数据连接优先级是由低到高

Android 中新增 APN 配置

1、修改配置文件

2、进入Call Setting 模块设置 APN 配置信息

配置 APN 信息,是修改 $workdir/development/data/etc/apns-conf.xml 配置文件

开机自动建立 default 默认数据连接

查看手机上网的基本参数配置

adb  shell  netcfg   查看网络基本信息,如网卡名称、状态、IP地址、Mac地址

adb  shell  ip  route   查看IP路由表

完成DataConnection 数据连接的创建和设置:

1、初始化ApnContext,APN 上下午信息

2、SIM 卡加载完成后,设置创建DataConnection 数据连接

3、激活创建的DataConnection 数据连接

初始化ApnContext :

initApnContextAndDataConnection 获取 defaultEnable 和 networkConfigStrings 参数

networkConfigStrings 方法在 frameworks/base/core/res/res/values/configs.xml 配置文件中定义

onSetDependencyMet ,applyNewState 更新数据连接的状态;

创建DataConnection 连接

SIM 卡中联系人加载完成发出 EVENT_RECORDS_LOADED , GSMDataConnectionTracker 接收消息,调用onRecordsLoaded 完成default 默认数据连接的创建和激活:

1、createAllApnList  创建 ApnSetting (APN 配置信息的实体对象)对象列表

2、notifyOffApnsOfAvailability  发出数据连接变化的消息通知

3、setupDataOnReadyApns  创建和激活DataConnection 数据连接

onRecordsLoaded --> setupDataOnReadyApns --> trySetupData --> setupDate 完成数据连接的创建 --> createDataConnection 负责dc 对象的创建

激活DataConnection 数据连接

EVENT_DATA_SETUP_COMPLETE 消息创建,调用bringUp 激活当前数据连接;

创建EVENT_CONNECT,调用父类StateMachine的sendMessage方法,继而调用mSmHandler.sendMessage;

sMsHander 负责完成StateMachine 状态机的消息处理,handleMessage --> processMsg --> curStateInfo.state.processMessage

设置初始状态InactiveState,调用内部processMessage,继而调用onConnect 和 transitionTo

Android 手机上网实现机制相关推荐

  1. Android手机上网实现机制

    本章介绍DataConnectionTracker对DataConnection手机上网数据连接的管理机制和流程. 一.Android网络整体结构 流程结构图如下: Android网络中,在底层实现了 ...

  2. 电脑通过android手机上网 .

    方案一 转自:http://blog.csdn.net/lastsweetop/article/details/7257546 话说没网络怎么能行啊,要是断网了怎么办,用android手机可以轻松上网 ...

  3. Android手机上网、彩信APN设置

    Android手机上网.彩信APN设置 Godaddy最新域名优惠码 -  帅哥推荐博客主机 -  linost圣诞促销返款 -  iPhone4销售状态查询 前几天师弟跑来问我G2(Magic)怎么 ...

  4. 国外android手机 上网,Android手机通过电脑上网的几种方法

    本文定位:没有wifi,想让手机通过电脑的有线连接上网. android手机可以通过wifi上网,这个很好.可当没有wifi的时候怎么上啊,3G--->流量受限,看视频很不划算! 我这里总结了几 ...

  5. linux安卓usb网络,[原创]在多种系统下通过USB连接android手机上网

    基于三种系统:linux (for raspberry pi) windows 7 windows xp 首先,讲一下关于手机,从功能上分为两种: 第一:把手机当成无线网卡,手机连接了无线网络后,通过 ...

  6. Android手机上网必备:UC浏览器

    强大的网络功能作为未来智能手机发展的一大趋势,在android平台上已经有了显著地体 现.浏览器最为手机上网的第一入口,其作用当然是不言自明. UC浏览器作为国内手机应用服务提供商优势科技公司的主打产 ...

  7. android 手机屏幕旋转机制与使用说明

    android 屏幕旋转机制与使用说明 一 Overview 在开发android应用的时候,有可能需要让应用程序随着系统设置而进行调整,比如判断系统的屏幕方向.判断系统方向的方向导航设备等.除此之外 ...

  8. android 动态修改dns,如何修改android手机上网DNS

    由于我手机使用官方android play市场进行程序管理,从国内访问总电信提供的DNS总是劫持,所以需要使用自己额外设置DNS,关于DNS可以查看能正常从国内访问google服务的DNS doc,我 ...

  9. 如何修改android手机上网DNS

    http://safe.114dns.com/ (2013-6-27) 作者: 李海鑫更新时间: 6/28/2013 03:13:00 下午编辑文章1 Comment关键字: android , ...

最新文章

  1. kotlin ++ --_顺便说一句-探索Kotlin代表团
  2. linux里引号注意点
  3. Java库可以软件著作权,(最新整理)软件著作权-源代码范本
  4. github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库
  5. matlab求傅里叶级数展开式_傅里叶级数:从向量的角度看函数
  6. pythongui界面复选框数值选择并求和_如何使用Python从图像中分离复选框按钮和复......
  7. 多云架构落地设计和实施方案【华为云分享】
  8. 网易云音乐工程师,亲自揭晓消息队列改造之路! | 技术头条
  9. 中缀表达式转换为后缀表达式算法
  10. Ubuntu20安装gcc6.3.0
  11. 为什么Audition cc2017扫描不了电音插件,你需要这个软件
  12. java雪崩_缓存穿透和雪崩
  13. ubuntu搭建dns服务器
  14. 你每天应该吃多少水果?
  15. 秦令令:移动营销跨越之年
  16. html中repeat的作用,深入探究CSS repeat()函数知识及用法
  17. 安全系列之——数据传输的完整性、私密性、源认证、不可否认性
  18. 心里窝火无语的图片_窝火的心情说说图片
  19. YED-M724嵌入式4G Cat1 核心板介绍
  20. 涨知识|最新十种深度学习算法要点及代码解析「精华」

热门文章

  1. Hive教程(一)---hive入门
  2. DedeCms织梦 tag标签静态化-教程
  3. Arduino单片机(五).基于OpenWrt模块的无线视频遥控小车设计
  4. 【经典】CSS技巧教程资源大全
  5. 1219 | 中国ICT企业家大会,我们不见不散~
  6. 计算机组织有CPU,计算机组织与结构 复习题 练习-cpu and memory(3页)-原创力文档...
  7. [maven报错]mvn clean install报错BUILD FAILURE
  8. 常见网络故障排错思路
  9. 利用Snippet快捷键在TeXpad上快速初始化中文环境的LaTeX模板
  10. CANoe 11.xx 快速入门教学