最近在学习Android WiFi framework的相关知识,本篇简单总结一下WifiService的启动流程。
1.0、WifiService的启动简单时序图表示:
1.1、启动WifiService
Wifiservice的启动地方在SystemServer中;
SystemServer路径:framwork/base/service/java/com/android/server/SystemServer.java
是在SystemServer.java的 startOtherServices() 方法中,启动了WifiService,代码如下:
上面方法中调用了SystemServiceManager的startService();
SystemServiceManager路径:frameworks/base/services/core/java/com/android/server/SystemServiceManager.java
相关代码:
在上面方法中,使用 Constructor constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext);
构造了一个WifiService的实例,然后使用mServices.add(service);向系统注册WifiService,并调用WifiService的onStart方法。
下面我们再分析下WifiService构造方法。
1.2、WifiService构造方法
WifiService路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiService.java
WifiService的构造方法如下:
在上面方法中新建了一个WifiServiceImpl实例,它是Wifi管理服务真正的实现者,在前面的WifiService启动过程中调用了WifiService的onStart方法;在onStart方法中发布了Wifi服务,发布的代码如下:
通过上面的分析,我们知道了WifiServiceImpl才是真正的WifiService。下面我们再分析下WifiServiceImpl构造方法。
1.3、WifiServiceImpl的构造方法
WifiServiceImpl路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
WifiServiceImpl的构造方法如下:
方法中主要执行了Wifi模块相关对象的实例化:如:
mTrafficPoller,用来查询流量统计信息比通知给客户端的。
mWifiStateMachine ,Wifi状态机,它定义了wifi的很多状态,通过消息驱动状态的转变。
mPowerManager ,用于wifi的电源管理。
WifiStateMachineHandler,用于发送和处理wifi状态机相关的消息。
mWifiController,是另一个状态机,它和mWifiStateMachine 不同,mWifiStateMachine 表述wifi具体的状态,比如supplicant启动/关闭状态,driver启动/关闭状态等,mWifiController 则更高一级的控制wifi设备的开关状态,wifi热点的开关状态等。 在状态机中的消息处理中完成驱动的加载或者启动supplicant等。