Android WiFi Service启动-Android13

Android WiFi Service启动 - Android13

  • 1、SystemServer中入口
  • 2、WifiService启动
    • 2.1 关键类概要
    • 2.2 启动时序图

Android WiFi基础概览
AOSP > 文档 > 心主题 > WiFi概览


1、SystemServer中入口

  1. 编译生成对应的jar包:"/apex/com.android.wifi/javalib/service-wifi.jar"
  2. 相关WiFi服务:WifiServiceWifiScanningServiceRttServiceWifiAwareServiceWifiP2pService

frameworks/base/services/java/com/android/server/SystemServer.java

    private static final String WIFI_APEX_SERVICE_JAR_PATH ="/apex/com.android.wifi/javalib/service-wifi.jar";private static final String WIFI_SERVICE_CLASS ="com.android.server.wifi.WifiService";private static final String WIFI_SCANNING_SERVICE_CLASS ="com.android.server.wifi.scanner.WifiScanningService";private static final String WIFI_RTT_SERVICE_CLASS ="com.android.server.wifi.rtt.RttService";private static final String WIFI_AWARE_SERVICE_CLASS ="com.android.server.wifi.aware.WifiAwareService";private static final String WIFI_P2P_SERVICE_CLASS ="com.android.server.wifi.p2p.WifiP2pService";/*** Starts a miscellaneous grab bag of stuff that has yet to be refactored and organized.*/private void startOtherServices(@NonNull TimingsTraceAndSlog t) {// ... ... ... ...if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {// Wifi Service must be started first for wifi-related services.t.traceBegin("StartWifi");mSystemServiceManager.startServiceFromJar(WIFI_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();t.traceBegin("StartWifiScanning");mSystemServiceManager.startServiceFromJar(WIFI_SCANNING_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)) {t.traceBegin("StartRttService");mSystemServiceManager.startServiceFromJar(WIFI_RTT_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE)) {t.traceBegin("StartWifiAware");mSystemServiceManager.startServiceFromJar(WIFI_AWARE_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)) {t.traceBegin("StartWifiP2P");mSystemServiceManager.startServiceFromJar(WIFI_P2P_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}// ... ... ... ...}

2、WifiService启动

2.1 关键类概要

  1. WifiInjector.java : WiFi依赖性注入器。用于访问各种WiFi类实例,并作为模拟注入的句柄。
  2. WifiConnectivityManager.java : 管理所有与连接相关的扫描活动。当屏幕打开或关闭、WiFi连接或断开连接或按需时,会启动扫描,扫描结果会传递给WifiNetworkSelector,由其建议连接到哪个网络。
  3. ClientModeManagerBroadcastQueue.java : 用于在多个并发客户端接口处于活动状态时缓冲公共广播,以在存在单个客户端接口处于激活状态时保留应用程序预期的遗留行为。
  4. StateMachine.java : 这里定义的状态机是一个分层状态机,它处理消息,并且可以具有分层排列的状态。
    状态是state对象,必须实现processMessage并可选地输入exit getName。进入/退出方法相当于面向对象编程中的构造和销毁,分别用于执行状态的初始化和清理。getName方法返回状态的名称;默认实现返回类名。让getName返回状态实例名称可能是可取的,特别是在特定状态类具有多个实例的情况下。
    创建状态机时,addState用于构建层次结构,setInitialState用于标识其中哪一个是初始状态。构造完成后,程序员调用start来初始化并启动状态机。StateMachine的第一个操作是从其最年长的父级开始,对初始状态的所有层次结构调用enter。要输入的调用将在StateMachine的处理程序的上下文中进行,而不是在要启动的调用的上下文中,并且它们将在处理任何消息之前被调用。例如,给定下面的简单状态机,将调用mP1.enter,然后调用mS1.enter。最后,发送到状态机的消息将由当前状态处理;在我们下面的简单状态机中,它最初是mS1.processMessage
  5. WifiServiceImpl.java : 实际处理实现处理类;WifiService通过实现IWifiManager接口来处理远程WiFi操作请求。
  6. ActiveModeWarden.javaConcreteClientModeManager.java : 不同WiFi操作模式的实现。在客户端模式中管理WiFi,连接到配置的网络,在仅扫描模式下我们不连接到配置网络,但执行扫描。此类的一个实例处于活动状态,用于管理每个客户端接口。(Android 12 引入了 Wi-Fi STA/STA 并发功能,使设备可同时连接到两个 Wi-Fi 网络。)

packages/modules/Wifi/service/java/com/android/server/wifi/ConcreteClientModeManager.java
在这里插入图片描述

2.2 启动时序图

启动过程不在赘述,主要处理类WifiServiceImpl.javapublishBinderService(Context.WIFI_SERVICE, mImpl)),主要WiFi连接处理ActiveModeWarden.javaConcreteClientModeManager.java

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/412537.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【时间复杂度】时间复杂度优化法则简讲

一、引言 时间复杂度是衡量算法运行效率的一项重要指标,它描述了随着输入规模的增加,算法的执行时间如何增长。在算法设计与分析中,我们经常面临着优化时间复杂度的任务,以便提高程序的性能。本博客将深入探讨时间复杂度的优化法…

Python——基本语法(二)

一、while 循环 语法&#xff1a; while 条件表达式:条件表达示为真&#xff0c;就执⾏这⾥的代码&#xff0c;必须缩进 4 个空格多⾏代码保持缩进⼀致 条件表达式可以是: True # 布尔值的 True 1 < 10 # 凡是在 if 语句中使⽤的判断表达示&#xff0c;这⾥都可以使…

(C++)大数计算问题

文章目录 一、实验目的、内容二、实验程序设计及结构1.需求分析类变量函数 2.设计结构或流程图 三、设计过程四、测试分析第一组第二组实验中出现的bug及解决方案 五、设计的特点和结果 一、实验目的、内容 大数是超过整数表示范围的整数&#xff0c;针对正整数运算&#xff0…

配置zabbix监控平台

目录 内容纯手敲&#xff0c;难免有误&#xff0c;若发现请私信我。 配置zabbix监控平台 一、进入官网 ​编辑​ 二、配置zabbix-server&#xff08;服务端&#xff09; 1.下载zabbix的yum源 2.安装Zabbix服务器、前端、代理 3.安装Zabbix前端 4.编辑文件/etc/yum.rep…

渗透测试之Kali2022 如何安装Nessus10.3.0

环境: KALI 2022 Nessus 10.3.0 问题描述: Kali2022 如何安装Nessus 10.3.0 A 解决方案: 1.Kali里面用浏览器前往官网下载Nessus https://www.tenable.com/downloads/nessus2.打开文件所在文件夹,在里面打开终端 dpkg -i Nessus-10.3.0-debian9_amd64.deb ──(ro…

投简历没回复?先做到这点。。

大家好&#xff0c;我是程序员鱼皮。 秋招告一段落&#xff0c;几家欢喜几家愁。不过这都无所谓了&#xff0c;上岸的同学继续努力&#xff0c;没上岸的同学发现问题&#xff0c;抓紧准备春招才是。 如果你投了几百份简历都没回复&#xff0c;那么一定有原因。比如环境、运气、…

蓝桥杯每日一题---基数排序

题目 分析 在实际的比赛过程中很少会自己手写排序&#xff0c;顶多是定义一下排序规则。之所以要练习一下基数排序&#xff0c;是因为在后续学习过程中学到后缀数组时需要自己手写基数排序&#xff0c;那么这里使用的方法也和后缀数组一致&#xff0c;理解这里也便于后缀数组的…

LabVIEW交变配流泵性能测试系统

利用LabVIEW软件与高级硬件结合&#xff0c;开发交变配流泵性能测试系统。该系统不仅提高了测试精度&#xff0c;还优化了工业自动化流程&#xff0c;代表了液压系统测试技术的进步。 开发了一种高精度的测试系统&#xff0c;该系统能够综合评估交变配流泵的性能&#xff0c;包…

架构篇04-复杂度来源:高性能

文章目录 单机复杂度集群的复杂度小结 从本篇开始&#xff0c;我们一起深入分析架构设计复杂度的 6 个来源&#xff0c;先来聊聊复杂度的来源之一高性能。 对性能孜孜不倦的追求是整个人类技术不断发展的根本驱动力。例如计算机&#xff0c;从电子管计算机到晶体管计算机再到集…

网页设计(六)表格与表格页面布局

一、设计《TF43: 前端的发展与未来》日程表 《TF43: 前端的发展与未来》日程表 文字素材&#xff1a; 前端是互联网技术的重要一环&#xff0c;自上世纪80年代万维网技术创立以来&#xff0c;Web成就了大量成功的商业公司&#xff0c;也诞生了诸多优秀的技术解决方案。因其标…

python贪吃蛇游戏

为了实现这个游戏&#xff0c;需要用到Python的pygame模块&#xff0c;它是一个专门用于开发游戏的模块&#xff0c;提供了很多方便的功能&#xff0c;比如窗口、图形、音效、事件处理等。 用pygame来创建一个窗口&#xff0c;设置游戏的背景色&#xff0c;画出蛇和食物&#…

什么是关键字?C语言的关键字有哪些?

目录 一、问题 二、解答 1、数据类型关键字&#xff08;12个&#xff09; (1) 声明和定义的区别 (2) 数据类型关键字 • char&#xff1a;声明字符型变量 1、声明字符变量 2、字符数组 3、ASCII码表示 4、指针与字符数组 5、多字节字符集&#xff08;如UTF-8&#xff…