Android网络框架

WifiManager

WifiManager用于暴露给用户操作WIFI,上层APP通常可以按照下面的方法获取WifiManager,然后就可以根据开放的函数操作WIFI。

val mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE)

上面的获取函数我们可以跟踪它的实现,发现它就是从一个map中根据Context.WIFI_SERVICE取出WifiManger对象的:

ContextImpl.java

SystemServiceRegistry.java​

 同样的,我们可以发现WifiManager对象的创建也是再这个类里面,在一个static代码段里面运行了下面这段代码,即在类被加载到时就创建了WifiManager并且注册到了上面的map中,我们可以看到在WifiManger创建时把WifiService的引用传了进去,实际上用户调用WifiManger时,所有对WIFI的操作都是走到了WifiService(WifiServiceImpl)。

 WifiService

WifiService是在SystemService中被启动的,我们可以在SystemService中看到main函数,然后一直走到创建WifiService:main() -> run() -> startOtherService() -> startService(WIFI_SERVICE_CLASS)。

SystemServer.java

 WifiService实际就是个简单的包装类,真正的实现都是由WifiServiceImpl类来实现,并且发布到ServiceManager中的也是WifiServiceImpl类,所以上面WifiManager中持有的是WifiServiceImpl,对Wifi的调用也都是走到的WifiServiceImpl。

WifiService.java

 WifiServiceImpl

上面说到了WifiManager暴露出来的所有关于wifi的操作都是由WifiServiceImpl实现的,这里我们先看一下他们的通信方式,第一种是是远程服务的直接调用,跟平时使用AIDL是一样的。

 第二种是通过AsyncChannel的方式,这种方式可以很方便的实现跨进程互相调用。

WifiManager.java

 上面的Message会发送到WifiServiceImpl,而WifiServiceImpl处理好又会回调到WifiManager。

WifiServiceImpl.java

 上面的回调的消息会在WifiManager的内部类ServiceHandler中收到并处理。

WifiServiceImpl对Wifi的操作,主要是通过WifiController实现,WifiController是一个状态机(TODO状态改变怎么发送到底层)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值