本文主要通过代码的执行流程简单的分析了WifiService的启动过程。
目录
1. WifiService的启动简单时序图表示:
接下来看下具体的代码实现逻辑:
2. WifiService代码执行流程
SystemService.java
路径:frameworks/base/services/java/com/android/server/SystemServer.java
WifiService是在SystemServer.java的 startOtherServices() 方法中启动的,代码如下
SystemServiceManager.java
路径: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.java
路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiService.java
在构造方法中新建了一个WifiServiceImpl实例,它是Wifi管理服务真正的实现者,在前面的WifiService启动过程中调用了WifiService的onStart方法;在onStart方法中发布了Wifi服务,具体的发布代码如下:
分析到这里就可以看出WifiServiceImpl才是真正的WifiService。我们接着看下WifiServiceImpl的构造方法中执行了哪些操作。
WifiServiceImpl.java
路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
在这个方法中进行了大量的实例化对象来管理WIFI的各个功能:
mTrafficPoller,用来查询流量统计信息比通知给客户端的。
mWifiStateMachine ,Wifi状态机,它定义了wifi的很多状态,通过消息驱动状态的转变。
mPowerManager ,用于wifi的电源管理。
WifiStateMachineHandler,用于发送和处理wifi状态机相关的消息。
mWifiController,是另一个状态机,它和mWifiStateMachine 不同,mWifiStateMachine 表述wifi具体的状态,比如supplicant启动/关闭状态,driver启动/关闭状态等,mWifiController 则更高一级的控制wifi设备的开关状态,wifi热点的开关状态等。 在状态机中的消息处理中完成驱动的加载或者启动supplicant等。
WifiService的启动流程分析到这里就基本结束了。