Wi-Fi Service 启动过程实现
系统启动过程:【知乎】[Boot]Android系统启动-SystemServer下篇
Wi-Fi Enable 设置过程
从 WifiSettings 类开始,声明如下:
public class WifiSettings extends RestrictedSettingsFragment implements Indexable, WifiTracker.WifiListener, AccessPointListener, WifiDialog.WifiDialogListener, DialogInterface.OnDismissListener
内部定义了 WifiManager 类成员:
WifiManager mWifiManager;
成员函数 onStart() 内部通过 createWifiEnabler() 接口创建了 WifiEbabler 类成员
WifiEnabler 声明如下:
public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListener
其成员函数 onSwitchToggled() 内部处理过程通过调用 mWifiManager.setWifiEnabled() 接口控制 Wifi 的开启
WifiManager 声明如下:
public class WifiManager
实际上它是 WIFI_SERVICE 的 Proxy 端,其 setWifiEnables() 接口内部通过 mService.setWifiEnabled() 接口从而进入 Binder 服务端 WifiService 类的实现
WifiService 包含三个类的实现:
- BaseWifiService:public class BaseWifiService extends IWifiManager.Stub 实现了 WifiService 的 Binder 服务端
WifiService:public final class WifiService extends SystemService,在其内部定义私有的 WifiServiceImpl 类成员 mImpl,在构造函数中进行了初始化
mImpl = new WifiServiceImpl(mWifiContext, injector, channel);
- WifiServiceImpl:public class WifiServiceImpl extends BaseWifiService,服务端类的真实实现类
回到主线上,实际上在 WifiManager 中的调用进入了 WifiServiceImpl 类成员调用,进行了安全等检查之后最终调用了 mActiveModeWarden.wifiToggled() 接口
那么 mActiveModeWarden 是从哪里来的呢?
① WifiServiceImpl 构造函数中 mActiveModeWarden = mWifiInjector.getActiveModeWarden(); 获取到
② WifiServiceImpl 构造函数中 mWifiInjector = wifiInjector; 初始化了 mWifiInjector