Android 7.0 WifiMonitor工作流程分析
在wifi启动扫描的分析过程中,出现了多次WifiMonitor的操作,在此分析一下这个函数是如何工作的。 在Android的Wifi体系中,WifiMonitor承担着分发来自wpa_supplicant底层事件的任务。当上层下达Wifi的扫描、连接等指令后, 底层驱动以及wpa_s进行实际的扫描、连接操作,操作完成后会向上层反馈一个event,通知framework扫描是否结束、连接是否成功。 1.WifiMonitor的初始化 在WifiStateMachine的构造函数中获取WifiMonitor的实例,并且在WifiStateMachine的构造函数中注册了一系列的handler。 从启动扫描流程中可知,在启动过程中会调用startMonitoring(),开始监听从底层上报的消息。 2.startMonitoring() 为了监听wpa_supplicant的事件,需要先建立与wpa_s的消息通道,这一步调用WifiNative.connectToSupplicant()实现。 如果是第一次进行监听mConnected为false,进入else分支。先建立与wpa_s的消息通道,建立成功后会向WifiStateMachine发送SUP_CONNECTION_EVENT消息,通知Wifi状态机。随后,开启事件监听线程:new MonitorThread