一 网络连接功能介绍
ANDROID 系统网络连接和管理服务由四个系统服务ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService共同配合完成网络连接和管理功能,四个服务只有ConnectivityService、NetworkPolicyManagerService两个服务通过NetworkPolicyManager、ConnectivityManager两个客户端对象对应用程序提供对外SDK接口,而NetworkManagementService、NetworkStatsService没有对外提供SDK接口,但设置应用程序可以通过获取系统服务接口使用NetworkManagementService、NetworkStatsService服务.
四个服务之间的关系类图如下:
图1 网络连接系统类图
ConnectivityService提供数据连接管理服务,NetworkPolicyManagerService提供网络策略管理服务,NetworkStatsService提供网络传输数据统计服务,NetworkManagementService提供对物理网络接口的管理服务,connectivityService也包括VPN、Tethering对象提供虚拟连接及共享连接管理。
ConnectivityService、NetworkPolicyManagerService、NetworkStatsService三个服务都通过INetworkManagementService接口跨进程访问NetworkManagementService服务,实现与网络接口的交互及信息读取。
NetworkStatsService、NetworkPolicyManagerService两个服务还通过IConnectivityManager接口与connectivityService服务通讯,从connectivityService读取网络连接的信息及打开数据连接的策略控制。
ConnectivityService服务也通过INetworkPolicyManager接口调用NetworkPolicyManagerService的API,读取网络限额信息,登记监听对象。connectivityService服务通过NetworkPolicyManagerService服务的registerListener函数向NetworkPolicyManagerService服务注册一个INetworkPolicyListener.Stub监听桩对象。 NetworkPolicyManagerService通过该监听对象的远程代理接口向ConnectivityService服务传送规则变化通知。
另外ConnectivityService服务的Tethering、VPN对象及NetworkPolicyManagerService、NetworkStatsService服务的内部NetworkAlertObserver类型的对象都直接或间接派生自INetworkManagementEventObserver.Stub,且四个对象都登记为NetworkManagementService的监听对象,NetworkManagementService服务通过INetworkManagementEventObserver接口向这些对象传送网络接口事件通知。
NetworkPolicyManagerService维护网络使用策略,策略可以从一个策略文件读取(策略文件保存在系统目录下的netpolicy.xml文件中)。也可以通过NetworkPolicyManager对外提供的设置策略接口(setNetworkPolicies及setUidPolicy)进行设置,NetworkPolicyManagerService能够根据这些设置或从策略文件中读取的策略控制网络连接。另外NetworkPolicyManagerService还具有动态调节网络连接限额及动态设置网络连接的功能,动态调节网络连接限额机制是通过INetworkStatsService访问NetworkStatsService服务获得上面设置或读取的策略匹配的网络连接类型的传输统计信息(NetworkPolicyManagerService采用NetworkTemplate进行网络连接类型的匹配),并根据这些