Wi—Fi系统Java层的核心是根据IWifiManger接口所创建的Binder服务器端和客户端,服务器端是WifiService,客户端是WifiManger。
编译IWiflManger.aidl生成文件IWiflManger.java,并生成IWifiManger.Stub(服务器端抽象类)和IWifiManger.Stub.Proxy(客户端代理实现类)。WifiService通过继承IWifiManger.Stub实现,而客户端通过9etService()函数获取IWifiManger.Stub.Proxy(即Service的代理类),将其作为参数传递给WifiManger,供其与WifiService通信时使用。
Wi—Fi系统Java部分的核心是根据IWifiManager接口所创建的Binder服务器端和客户端,服务器端是WifiService,客户端是WifiManager。具体结构如图17—4所示。
图17—4中主要构成元素的具体说明如下所示。
(1)WiFiManger是Wi—Fi部分与外界的接口,用户通过它来访问Wi—Fi的核心功能。WifiWatchdogService这一系统组件也是用WifiManger来执行一些具体操作。
(2)WifiService是服务器端的实现,作为Wi—Fi的核心,处理实际的驱动加载、扫描、链接/断开等命令,以及底层上报的事件。,对于主动的命令控制,Wi—Fi是一个简单的封装,针对来自客户端的控制命令,调用相应的WifiNative底层实现。
当接收到客户端的命令后,一般会将其转换成对应的自身消息塞入消息队列中,以便客户端的调用可以及时返回,然后在WifiHandler的handleMessage()中处理对应的消息。而底层上报的事件,WifiService则通过启动WifiStateTracker来负责处理。WifiStateTracker和wifiMonitor的具体功能如下所示。
WifiStateTracker除了负责WiFi的电源管理模式等功能外,其核心是WifiMonitor所实现的事件轮询机制,以及消息处理函数handleMessage()。
WifLMonitor通过开启一个MonitorThread来实现事件的轮询,轮询的关键函数是前面提到的阻塞式函数WifiNative.waitForEvent()。获取事件后,WifiMonitor通过一系列的Handler通知给WifiStateTracker。这里WifiMonitor的通知机制是将底层事件转换成WifiStateTracker所能识别的消息,塞入WifiStateTracker的消息循环中,最终在handleMessage()中由WifiStateTracker完成对应的处理。
……
展开