




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android平台网络连接架构解析2016-09李国辉一 概述截止到最新的7.0版本,android网络连接管理系统一直都由四个service组成, 分别是ConnectivityService,NetworkPolicyManagerService,NetworkManagementService,NetworkStatsService共同配合完成网络连接和管理功能,其中核心服务是ConnectivityService,而本文也会着重介绍该service的架构,四个service中NetworkPolicyManagerService通过NetworkPolicyManager对外提供SDK接口,而ConnectivityService通过ConnectivityManager对外提供SDK接口,整体的框架图如下:1. ConnectivityService提供数据连接管理服务,负责管理Mobile,WIFI,BT,Ethernet几大类网络连接,同时提供VPN和Tethering服务。2.NetworkPolicyManagerService提供网络策略管理服务,NetworkPolicyManagerService维护网络使用策略,策略可以从一个策略文件读取(策略文件保存在系统目录下的netpolicy.xml文件中)。也可以通过NetworkPolicyManager对外提供的设置策略接口(setNetworkPolicies及setUidPolicy)进行设置,NetworkPolicyManagerService能够根据这些设置或从策略文件中读取的策略控制网络连接。另外NetworkPolicyManagerService还具有动态调节网络连接限额及动态设置网络连接的功能,动态调节网络连接限额机制是通过INetworkStatsService访问NetworkStatsService服务获得上面设置或读取的策略匹配的网络连接类型的传输统计信息(NetworkPolicyManagerService采用NetworkTemplate进行网络连接类型的匹配),并根据这些信息生成有效的规则,并提交给ConnectivityService服务,并调用NetworkManagementService 的setInterfaceQuota函数对网络连接的带宽限额。3.NetworkStatsService提供网络传输数据流量统计服务,NetworkStatsService服务定期调用performPoll函数获得网络传输统计信息,performPoll函数通过调用NetworkManagementService服务的getNetworkStatsUidDetail、getNetworkStatsSummary及getNetworkStatsTethering函数从/proc/目录下的包含网络传输统计数据的文件中读取网络统计信息,并转换为NetworkStatsHistory数据结构,保存到以网络接口名称对应的NetworkIdentitySet类型和UID 对应的UidStatsKey类型的变量为key 的NetworkStatsService的三个HashMap变量中。然后根据performPoll传进来的参数标志信息(指示不同的PERSIST方法)调用writeNetworkDevStatsLocked、writeNetworkXtStatsLocked、writeUidStatsLocked函数把HashMap变量中的统计信息分别写入系统目录下的三个相应的BIN文件(netstats.bin、netstats_xt.bin、netstats_uid.bin)中。4.NetworkManagementService提供对物理网络接口的管理服务,ConnectivityService、NetworkPolicyManagerService、NetworkStatsService三个服务都通过INetworkManagementService接口跨进程访问NetworkManagementService服务,实现与系统底层网络物理接口的各类操作,比如设置IP路由表,限制流量,或者获取流量统计数据。二ConnectivityService框架及流程(一)整个Android的网络连接框架中,ConnectivityService是核心服务,实现对系统的所有数据连接进行管理,包括物理连接、虚拟连接以及共享连接。是ConnectivityManager的具体实现,实现了IConnectivityManager接口。在SystemServer的init2中进行初始化,并增加到ServiceManager中。该服务在SystemServer.java中随开机而启动:try log.i(TAG, Connectivity Service); connectivity = new ConnectivityService( context, networkManagement, networkStats, networkPolicy); ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity); networkStats.bindConnectivityManager(connectivity); networkPolicy.bindConnectivityManager(connectivity); catch (Throwable e) reportWtf(starting Connectivity Service, e);ConnectivityService服务通过NetworkAgent类和NetworkFactory类对象进行底层物理连接的管理。它主要提供以下几类服务: 1.监视网络连接状态,从中获取网络信息,包括(Wi-Fi, GPRS, UMTS, etc)2.当网络状态改变时发送广播通知3.当网络连接失败尝试连接其他网络4.提供API让应用程序获取可用的网络状态5.通过Tethering对象提供网络连接共享服务6.通过Vpn对象提供VPN连接服务。整体框架如下:(二) ConnectivityService支持的网络连接类型包括五个默认的数据连接类型,另外还有八个可以和独立的数据连接类型共存的子类型,定义在ConnectivityMnager.java文件中:publicstaticfinalintTYPE_MOBILE_MMS =2; (用于多媒体消息服务的移动数据连接类型,可以和MOBILE_TYPE数据连接类型相同也可以不同)publicstaticfinalintTYPE_MOBILE_SUPL =3; (定位设备的安全用户平面定位服务用的移动数据连接类型,可以和MOBILE_ TYPE数据连接类型相同也可以不同)publicstaticfinalintTYPE_MOBILE_DUN =4; (用于执行拨号网络桥接的移动数据连接类型,可以和MOBILE_ TYPE数据连接类型相同也可以不同)publicstaticfinalintTYPE_MOBILE_HIPRI =5; (一个具有最高优先级的移动数据连接类型,与MOBILE _ TYPE类型除了路由设置不同外,其它方面都相同。在路由设置时,如果默认路由存在,则仅当请求进程必须存取移动DNS服务及IP明确的通过requestRouteToHost函数请求时使用这个数据连接接口)publicstaticfinalintTYPE_WIMAX =6;/(属TYPE_WIFI)publicstaticfinalintTYPE_BLUETOOTH =7;publicstaticfinalintTYPE_DUMMY =8;publicstaticfinalintTYPE_ETHERNET =9;publicstaticfinalintTYPE_MOBILE_FOTA =10; (用于空中固件升级的移动数据连接)publicstaticfinalintTYPE_MOBILE_IMS =11; (用于IP多媒体子系统的移动数据连接类型)publicstaticfinalintTYPE_MOBILE_CBS =12; (用于品牌服务的移动数据连接类型)publicstaticfinalintTYPE_WIFI_P2P =13; (用于WIFI点对点连接)publicstaticfinalintTYPE_MOBILE_IA =14;publicstaticfinalintTYPE_MOBILE_EMERGENCY =15;publicstaticfinalintTYPE_PROXY =16;publicstaticfinalintTYPE_VPN =17;(三)以移动数据为例阐述上层应用如何通过Connectivityservice打开数据连接,以及Telephony如何在Connectivityservice注册自己的Agent打开数据连接的流程:1.Application调用SDK接口startUsingNetworkFeature2.Request被发送到ConnectivityService服务中3.ConnectivityService通过NetworkFactory将request发送到Telephony内部4.Telephony负责Setup data callConnectivityManager.startUsingNetworkFeatureConnectivityManager. requestNetworkForFeatureLockedConnectivityManager. sendRequestForNetworkConnectivityService.requestNetworkConnectivityService .handleRegisterNetworkRequestConnectivityService .handleAddRequestDcTracker.needNetworkForRil. setupDataCall当数据连接打开后,在Connectivityservice注册Agent的流程如下:1.DataConnection状态机在DcActiveState中实例化一个NetworkAgent2.NetworkAgent的构造函数中调用RegisterNetworkAgent函数向ConnectivityService注册代理函数3.移动数据的Agent被发送到ConnectivityService服务中4.ConnectivityService将该Agent注册到自己的list中,并对同类型的Agent进行分数对比,如果存在同类型的Agent,则分数高的替代分数低的,而分数低的会被执行关闭操作DataCo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025技术顾问聘用合同书范本
- 敏捷人才发展模式-洞察及研究
- 2025公司租赁合同模板
- 2025股权激励计划合同股权转让操作流程
- 2025工程合同担保书(标准版)
- 冲压返修人员前安全培训课件
- 冲压安全生产培训心得
- 2025年二手房东租赁合同范本
- 2025年河北省农产品采购合同模板
- 冲击波碎石科课件
- 浙江名校协作体(G12)2025年9月2026届高三返校联考物理(含答案)
- 中小学心理健康c证考试试题及答案
- 2025-2026秋季中小学第一学期升旗仪式22周校长演讲稿:第1周 烽火记忆照前路秋风为序启新程
- 污水厂工艺知识培训课件
- 2025秋人教部编版二年级上册语文教学计划
- 科学护肤知识课件
- 2025年黑龙江全国导游人员资格考试(全国导游基础知识、地方导游基础知识)历年参考题库含答案详解(5套)
- 分级护理落实率
- DB4419T 23-2024 建设工程施工无废工地管理规范
- 幼儿园改造提升项目可行性研究报告
- 2025至2030全球及中国石油天然气中的人工智能行业项目调研及市场前景预测评估报告
评论
0/150
提交评论