2019独角兽企业重金招聘Python工程师标准>>>

在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(mWifiNative, this).start():

这里我们假设事先下发的是一个wifi扫描的指令,wpa_s反馈event通知wifi扫描的结果,根据实现的一些匹配规则,最后进入handleEvent()函数,此处event是SCAN_RESULTS,向WifiStateMachine发送SCAN_RESULTS_EVENT消息,告知它扫描已经结束,可以去读取扫描结果了。这样,处理流程就用返回到Wifi状态机中。WifiStateMachine收到此消息后,调用WifiStateMachine::setScanResults()方法从wpa_s读取扫描结果,并向外界发送WifiManager.SCAN_RESULTS_AVAILABLE_ACTION广播通知应用。此时一些注册过该广播的应用,例如手机中的Setting app,就能通过调用WifiManager::getScanResults()读取扫描结果了。至此,一个简单的WifiMonitor分发事件的流程结束,其他类型事件的分发跟此过程相似。

至此,一个简单的上层流程分析结束了。
---------------------

转载于:https://my.oschina.net/u/920274/blog/3057586

Android 7.0 WifiMonitor工作流程分析相关推荐

  1. Android 7.0 Vold工作流程

    一.Vold工作机制 Vold是Volume Daemon的缩写,它是Android平台中外部存储系统的管控中心,是管理和控制Android平台外部存储设备的后台进程.其功能主要包括:SD卡的插拔事件 ...

  2. android的构成和工作流程,分析Android中View的工作流程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 在分析View的工作流程时,需要先分析一个很重要的类,MeasureSpec.这个类在View的测量(Measure)过 ...

  3. Android 9.0 Vold 挂载流程分析

    在Android 系统中所有的热插拔设备都是通过Vold 进程挂载的.通过kernel–>vold–>StorageManagerService这样的架构去逐级上报热插拔事件. 一.Vol ...

  4. Android 8.0 Activity启动流程分析

    Activity启动过程中需要注意的一些类: Instrumentation     完成对Application和Activity初始化和生命周期调用的工具类.用来监控系统与应用的交互. Activ ...

  5. 全志平台Android系统WIFI架构工作流程分析

    1. 前言 记录个人最近对Android wifi的了解和使用感受, 并为想入门.学习Android wifi的人员提供一定的参考 2. Android系统中的WIFI架构 wifi在Android中 ...

  6. Android 11.0 Settings源码分析 - 主界面加载

    Android 11.0 Settings源码分析 - 主界面加载 本篇主要记录AndroidR Settings源码主界面加载流程,方便后续工作调试其流程. Settings代码路径: packag ...

  7. Android 7.1 屏幕旋转流程分析

    Android 7.1   屏幕旋转流程分析 一.概述 Android屏幕的旋转在framework主要涉及到三个类,结构如图 PhoneWindowManager:为屏幕的横竖屏转换的管理类. Wi ...

  8. Android Audio音量设置原理流程分析

    Android Audio音量设置原理流程分析 简介 本篇文章主要介绍Android音量设置从App应用层到framework层执行流程,以及相关的细节和原理分析,建议在阅读此文章前去看博主的混音理论 ...

  9. 16.U-boot的工作流程分析-2440

    16.U-boot的工作流程分析-2440 分析的流程: 程序入口 第一阶段程序分析 第二阶段程序分析 2440开发板: 1.uboot的入口: 要看uboot工程的入口,首先打开顶层目录的Makef ...

最新文章

  1. 计算机视觉库OpenCV之saturate_cast防数据越界函数
  2. 冬季巧食生姜可提高免疫力
  3. sscanf函数用法详解
  4. oracle loder nextval,ORA-07445: 出现异常错误: 核心转储
  5. spark ui_Spark UI的见解
  6. 大厂必备!阿里、字节跳动、京东、腾讯、小米等名企高频面试
  7. Kubernetes 微服务监控体系
  8. Easyui弹出窗口在iframe中弹出被当前iframe遮罩的问题(解决方法)
  9. Java开发必会MVC三层架构
  10. php查看mysql最近执行过的sql_PHP获取MySQL执行sql语句的查询时间
  11. java线程集合点_Jmeter集合点(线程组和同步定时器)
  12. 三个月可更改用户昵称两次
  13. RBF神经网络及其应用【神经网络】
  14. jsf+EJB开发实例
  15. 关于修改双系统默认启动项设置
  16. STM32学习笔记(11)电容触摸按键
  17. 实验3 SQL的复杂多表查询以及视图
  18. 交通流量预测-混合注意力时空图卷积-ASTGCN
  19. 串口通信--两台PC机之间的简单传输
  20. Java中过大整数储存问题(bushi

热门文章

  1. 使用libjpeg进行图片压缩(哈夫曼算法,无损压缩)
  2. PHPExcel对于Excel中日期和时间类型的处理
  3. 测试机型不够?把玩家反馈过的问题机型,都测个遍
  4. SQLSTATE[HY000] [2003] Can’t connect to MySQL serv
  5. Struts2 interceptor使用经验小结
  6. FreeMarker中文帮助手册API文档,基础入门学习文档
  7. 微软 Internet 信息服务器(IIS) 5.0 和 6.0 状态代码说明
  8. ThinkSNS+ 是如何计算字符显示长度的
  9. 多线程-010-后台线程
  10. 详细的多维度测评,看看哪个 Python 版本速度最快!