Android 9.0 WifiService启动流程

时间:2024-05-23 07:58:08

最近在学习Android WiFi framework的相关知识,本篇简单总结一下WifiService的启动流程。

1.0、WifiService的启动简单时序图表示:

Android 9.0 WifiService启动流程

 

1.1、启动WifiService

Wifiservice的启动地方在SystemServer中;

SystemServer路径:framwork/base/service/java/com/android/server/SystemServer.java

是在SystemServer.java startOtherServices() 方法中,启动了WifiService,代码如下:

Android 9.0 WifiService启动流程

上面方法中调用了SystemServiceManager的startService();

SystemServiceManager路径:frameworks/base/services/core/java/com/android/server/SystemServiceManager.java

相关代码:

Android 9.0 WifiService启动流程

在上面方法中,使用 Constructor constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext);

构造了一个WifiService的实例,然后使用mServices.add(service);向系统注册WifiService,并调用WifiServiceonStart方法。

下面我们再分析下WifiService构造方法。

1.2WifiService构造方法

WifiService路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiService.java
WifiService的构造方法如下:

Android 9.0 WifiService启动流程

在上面方法中新建了一个WifiServiceImpl实例,它是Wifi管理服务真正的实现者,在前面的WifiService启动过程中调用了WifiServiceonStart方法;在onStart方法中发布了Wifi服务,发布的代码如下:

Android 9.0 WifiService启动流程

通过上面的分析,我们知道了WifiServiceImpl才是真正的WifiService。下面我们再分析下WifiServiceImpl构造方法。

1.3WifiServiceImpl的构造方法

WifiServiceImpl路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
WifiServiceImpl的构造方法如下:

Android 9.0 WifiService启动流程

方法中主要执行了Wifi模块相关对象的实例化:如:

mTrafficPoller,用来查询流量统计信息比通知给客户端的。
mWifiStateMachine Wifi状态机,它定义了wifi的很多状态,通过消息驱动状态的转变。
mPowerManager ,用于wifi的电源管理。
WifiStateMachineHandler,用于发送和处理wifi状态机相关的消息。
mWifiController,是另一个状态机,它和mWifiStateMachine 不同,mWifiStateMachine 表述wifi具体的状态,比如supplicant启动/关闭状态,driver启动/关闭状态等,mWifiController 则更高一级的控制wifi设备的开关状态,wifi热点的开关状态等。 在状态机中的消息处理中完成驱动的加载或者启动supplicant等。