前言
图解框架系列文章,原则上是用图示和最少的文字来表达,今天就开个头。目的主要是自己备忘,如果有人看过会感觉有所帮助,那就更好不过。
android2.3网络管理架构图:
要点1:从上向下看,有三条线api、jni和ki。api上面是andorid框架给第三方或原生android应用提供的接口,android的api是java的接口。WifiManager主要提供的就是你在Settings应用里设置Wifi的功能,如使能关闭wifi、选择一个热点然后连接、dhcp或者是静态ip等。 EthManager也是类似。 jni上面的java层属于framework比较稳定的部分,ki上面的hal层则经常会随驱动接口变化而变化,hal层变化的目的就是为了稳定jni和api。
要点2:jni上面左右对称,WifiService和EthService分别通过NetworkStateTracker的子类WifiStateTracker与EthStateTracker与hal层交互。ConnectivityService接收NetworkStateTracker发出的Broadcast(连接或断开),根据配置文件中的优先级来决定通过哪种网络上网。 WifiService和EthernetService还负责把用户的配置信息保存进数据库(SettingProvider)。 WifiService还会关心很多系统消息,比如黑屏、插拔充电器, 并且管理WifiLock(一种提供给应用程序阻止黑屏后wifi休眠的机制,在无wifilock锁住情况下一段时间后wifi将进入休眠状态,网络会断掉)。
要点3:hal层差异,wifi这边的jni接口WifiNative主要有两种任务,1是加载卸载wifi驱动,启动停止wpa_supplicant服务, 2是把所有上层发下来的命令全部转给wpa_supplicant来处理。 包括搜索热点,连接到某个热点,获取热点信号强度等。 真正意义上的wifi硬件适配层藏在wpa_supplicant里面, 由于不同wifi厂家提供的wifi驱动接口不统一,wifi供应商不仅会提供wifi驱动,而且还有相应的wpa_suplicant适配层,比如上图的driver_nano和driver_wext。 以太网那边就简单得多,因为驱动提供的接口都是标准话的,不像wifi那样不按规矩办事。 EthNative主要用于搜索网卡设备和监听网卡插拔消息。 中间的NetWorkUtil可以看做等同于ifconfig的功能, 就是提供网络设备(不管wifi还是ethernet)的使能关闭和配置ip、网关、子网掩码等基础功能。