Wifi服务框架介绍(原)

本文介绍了Android中的WIFI服务框架,主要包括WifiService、WifiManager、WifiServiceImpl和WifiStateMachine的初始化和运作机制。在初始化阶段,重点讲解了WifiService和WifiManager的启动流程;在运作机制部分,探讨了setWifiEnabled和connect方法的使用,以及WifiManager如何通过WifiServiceImpl处理请求。
摘要由CSDN通过智能技术生成
        本文简要介绍WIFI服务的主要框架以及运作机制

        WIFI框架主要涉及到以下几个对象:WifiService、WifiManager、WifiServiceImpl、WifiStateMachine等。下面来介绍这四个对象的内在联系。


一、WIFI服务的初始化


        WIFI服务的初始化分为两个部分,WifiService的初始化和WifiManager的初始化,下面分别介绍。


1.1、WifiService的初始化流程


        WifiService的初始化流程是在SystemService中被启动的:
        @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
  • 14
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值