Wifi Enable 启动过程

本文详细介绍了Android系统启动Wi-Fi的过程,从WifiSettings到WifiService,涉及到WifiManager、StateMachine、ClientModeManager等多个组件的交互。在启动过程中,通过WifiController发送CMD_WIFI_TOGGLED消息,触发状态机转换,最终通过WifiVendorHal加载驱动并启动Wi-Fi服务。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值