5.2.2 WifiService构造函数分析

WifiService构造函数的代码如下所示。

[—>WifiService.java::WifiService构造函数]

  1. WifiService(Context context) {
  2. mContext = context;
  3.  
  4. // 从系统属性“wifi.interface”中取出无线网络设备接口名。默认值为“wlan0”
  5. mInterfaceName = SystemProperties.get("wifi.interface", "wlan0");
  6. // 创建一个WifiStateMachine对象,它是WifiService相关模块中的核心
  7. mWifiStateMachine = new WifiStateMachine(mContext, mInterfaceName);
  8.  
  9. /*
  10. RSSI轮询机制。RSSI为Receive Signal Strength Indication(接收信号强度指示)
  11. 的缩写,它反映了无线网络质量的好坏。WPAS支持的RSSI信息包括:接收信号强度、连接速度
  12. (link speed)噪声强度(noise)和频率。在WPAS中,RSSI信息由wpa_signal_info
  13. 结构体来表达。
  14. */
  15. mWifiStateMachine.enableRssiPolling(true);
  16.  
  17. // 和BatteryStatsService交互。感兴趣的读者可阅读《深入理解Android:卷Ⅱ》5.5.2节
  18. mBatteryStats = BatteryStatsService.getService();
  19.  
  20. ......// 广播事件注册等处理。由于篇幅问题,本章将略去一些重要程度较低的代码
  21. HandlerThread wifiThread = new HandlerThread("WifiService");
  22. wifiThread.start();
  23. // mAsyncServiceHandler用于AsyncChannel,其交互对象来自WifiManager
  24. mAsyncServiceHandler = new AsyncServiceHandler(wifiThread.getLooper());
  25.  
  26. // mWifiStateMachineHandler也用于AsyncChannel,其交互对象来自WifiStateMachine
  27. mWifiStateMachineHandler = new WifiStateMachineHandler(wifiThread.getLooper());
  28. ......// 其他一些工作
  29. }

WifiService构造函数中主要工作是创建一些核心对象,其中:

·WifiStateMachine是WifiService中的核心,是本章分析的重点对象。

·mAsyncServiceHandler和mWifiStateMachineHandler都和AsyncChannel相关,与它们交互的Handler分别位于WifiManager和WifiStateMachine中。

马上来看最重要的WifiStateMachine。