本文简要介绍WIFI服务的主要框架以及运作机制。
1、在初始化时,也就是构造方法中,创建WifiServiceImpl对象。
2、在onStart时,将WifiServiceImpl对象注册到ServiceManager中。
这里创建的WifiServiceImpl是整个WIFI服务的管理者,他负责将客户端对WIFI的请求分类,然后派发给不同的处理中心。
下面先来看WifiServiceImpl的属性:
然后来看该对象的初始化过程,也就是构造方法:
WIFI框架主要涉及到以下几个对象:WifiService、WifiManager、WifiServiceImpl、WifiStateMachine等。下面来介绍这四个对象的内在联系。
一、WIFI服务的初始化
WIFI服务的初始化分为两个部分,WifiService的初始化和WifiManager的初始化,下面分别介绍。
1.1、WifiService的初始化流程
@SystemServer.java
private static final String WIFI_SERVICE_CLASS = "com.android.server.wifi.WifiService";
private void startOtherServices() {
mSystemServiceManager.startService(WIFI_SERVICE_CLASS);
}
在这里通过SystemServiceManager将WIFI的主服务(WifiService)启动,然后来看该Service的启动过程:
@WifiService.java
public final class WifiService extends SystemService {
private static final String TAG = "WifiService";
final WifiServiceImpl mImpl;
public WifiService(Context context) {
super(context);
//创建WifiServiceImpl对象
mImpl = new WifiServiceImpl(context);
}
@Override
public void onStart() {
//将WifiServiceImpl注册到ServiceManager
publishBinderService(Context.WIFI_SERVICE, mImpl);
}
@Override
public void onBootPhase(int phase) {
if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
mImpl.checkAndStartWifi();
}
}
}
以上是WifiService的全部内容,其实该Service只完成了两个任务:
1、在初始化时,也就是构造方法中,创建WifiServiceImpl对象。
2、在onStart时,将WifiServiceImpl对象注册到ServiceManager中。
这里创建的WifiServiceImpl是整个WIFI服务的管理者,他负责将客户端对WIFI的请求分类,然后派发给不同的处理中心。
下面先来看WifiServiceImpl的属性:
public final class WifiServiceImpl extends IWifiManager.Stub {}
这说明该类是一个服务的实现类。
然后来看该对象的初始化过程,也就是构造方法:
@WifiServiceImpl.java
public WifiServiceImpl(Context context) {
mContext = context;
mInterfaceName = SystemProperties.get("wifi.interface", "wlan0");
mTrafficPoller = new WifiTrafficPoller(mContext, mInterfaceName);
//创建wifi状态机
mWifiStateMachine = new WifiStateMachine(mContext, mInterfaceName, mTrafficPoller);
mWifiStateMachine.enableRssiPolling(true);
//初始化各种管理者
mBatteryStats = BatteryStatsService.getService();
mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
mNotificationController = new WifiNotificationController(mContext, mWifiStateMachine);
mSettingsStore = new WifiSettingsStore(mContext);
HandlerThread wifiThread = new HandlerThread("WifiService");
wifiThread.start();
mClientHandler = new ClientHandler(wifiThread.getLooper());
mWifiStateMachineHandler = new WifiStateMachineHandler(wifiThread.getLooper());
mWifiController = new WifiController(mContext, this, wifiThread.getLooper());
mBatchedScanSupported = mContext.getResources().getBoolean( R.bool.config_wifi_batched_scan_sup