当前位置:首页 > 行业动态 > 正文

关于Android网络系统服务的运行机制和优化问题标题,Android网络系统服务如何运作并优化?

Android网络系统服务基于Linux内核,提供多种网络连接方式,如Wi-Fi、移动数据等。它支持TCP/IP协议,具备网络管理、数据传输等功能,确保设备稳定高效地连接网络。

1、服务

ConnectivityService:提供数据连接管理服务,包括移动数据、WIFI、以太网等,它实现对系统的所有数据连接进行管理,包括物理连接、虚拟连接以及共享连接,从frameworks/base/core/res/res/values/config.xml的networkAttributes中读取当前系统支持的网络连接类型。

NetworkPolicyManagerService:提供网络策略管理服务,它维护网络使用策略,策略可以从一个策略文件读取(策略文件保存在系统目录下的netpolicy.xml文件中),也可以通过NetworkPolicyManager对外提供的设置策略接口进行设置,能够根据这些设置或从策略文件中读取的策略控制网络连接,还具有动态调节网络连接限额及动态设置网络连接的功能。

NetworkStatsService:提供网络传输数据统计服务,它定期调用performPoll函数获得网络传输统计信息,通过调用NetworkManagementService服务的getNetworkStatsUidDetail、getNetworkStatsSummary及getNetworkStatsTethering函数从/proc/目录下的包含网络传输统计数据的文件中读取网络统计信息,并转换为NetworkStatsHistory数据结构,保存到以网络接口名称对应的NetworkIdentitySet类型和UID对应的UidStatsKey类型的变量为key的NetworkStatsService的三个HashMap变量中。

NetworkManagementService:提供对物理网络接口的管理服务,通过NativeDaemonConnector类建立和netd的联系,实现对物理接口进行操作;封装了关于接口、网络、防火墙等相关的处理函数,同时还通过Observer提供接口状态(INetworkManagementEventObserver)变更通知。

2、服务关系

ConnectivityService、NetworkPolicyManagerService、NetworkStatsService三个服务都通过INetworkManagementService接口跨进程访问NetworkManagementService服务,实现与网络接口的交互及信息读取。

NetworkStatsService、NetworkPolicyManagerService两个服务还通过IConnectivityManager接口与ConnectivityService服务通讯,从ConnectivityService读取网络连接的信息及打开数据连接的策略控制。

ConnectivityService服务也通过INetworkPolicyManager接口调用NetworkPolicyManagerService的API,读取网络限额信息,登记监听对象。

3、相关类说明

ConnectivityService:是Android框架的一部分,为应用程序和系统服务提供了关于网络连接(如wifi、mobile network、ethernet、bt-pan)的详细信息,作为管理员身份,每种网络都会去向它注册,网络的使用权全靠它来分配,并实现了网络评分机制确保了系统能够最出作优的网络连接,从而为用户提供更好的网络体验。

ConnectivityManager:是ConnectivityService的代理,代理意思是调用者不要关心具体接口的实现,只管调用,所以才设计此模式,所以ConnectivityManager作用是对外提供ConnectivityService的相关接口。

TelephonyNetworkFactory:是个移动的网络工厂,父类是NetworkFactory,用于SIM卡业务的数据链接。

WifiNetworkFactory:是个Wifi的网络工厂,父类是NetworkFactory,用于WIFI模块的数据链接。

EthernetNetworkFactory:是个以太网的网络工厂,父类是NetworkFactory,用于以太网业务的数据链接。

4、单元表格

服务名称 主要功能 关键接口
ConnectivityService 数据连接管理 INetworkManagementService、IConnectivityManager、INetworkPolicyManager
NetworkPolicyManagerService 网络策略管理 INetworkManagementService、IConnectivityManager
NetworkStatsService 网络传输数据统计 INetworkManagementService
NetworkManagementService 物理网络接口管理 INetworkManagementEventObserver

5、相关问题与解答

问题1:Android系统中如何实现网络策略的动态调节?

解答:NetworkPolicyManagerService服务通过检测系统发出的一些相关事件(在NetworkPolicyManagerService的启动systemReady函数中注册),包括ActivityManager服务中IProcessObserver的onForegroundActivitiesChanged及onProcessDied回调事件,NetworkManager服务中INetworkManagementEventObserver的limitReached回调事件,以及ACTION_SCREEN_ON、CONNECTIVITY_ACTION_IMMEDIATE、ACTION_PACKAGE_ADDED、ACTION_UID_REMOVED、ACTION_NETWORK_STATS_UPDATED、ACTION_ALLOW_BACKGROUND等INTENT事件,当这些事件发生时,根据事件不同对网络规则进行不同设置,如与应用程序相关的事件调用updateRulesForUidLocked函数对uid涉及的NetworkRule进行更新,其它事件通过updateNetworkEnabledLocked函数调用connectivityService的setPolicyDataEnable函数对特定网络连接类型的数据连接进行设置。

问题2:ConnectivityService是如何管理和分配网络连接的?

解答:ConnectivityService实现对系统的所有数据连接进行管理,包括物理连接、虚拟连接以及共享连接,从配置文件中读取当前系统支持的网络连接类型,在设备开机时,相关的网络工厂会向ConnectivityService进行注册,如果存在多种网络的情况下,ConnectivityService根据evalRequest逻辑进行评分,分数高的网络工厂会优先使用,这叫做网络评分机制,当应用调用请求网络requestNetwork时,最终根据evalRequest函数找到分数最高的网络工厂然后调用它的needNetworkFor来完成网络链接请求。

0