Android网络框架
Posted dfqin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android网络框架相关的知识,希望对你有一定的参考价值。
WifiManager
WifiManager用于暴露给用户操作WIFI,上层APP通常可以按照下面的方法获取WifiManager,然后就可以根据开放的函数操作WIFI。
val mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE)
上面的获取函数我们可以跟踪它的实现,发现它就是从一个map中根据Context.WIFI_SERVICE取出WifiManger对象的:
同样的,我们可以发现WifiManager对象的创建也是再这个类里面,在一个static代码段里面运行了下面这段代码,即在类被加载到时就创建了WifiManager并且注册到了上面的map中,我们可以看到在WifiManger创建时把WifiService的引用传了进去,实际上用户调用WifiManger时,所有对WIFI的操作都是走到了WifiService(WifiServiceImpl)。
WifiService
WifiService是在SystemService中被启动的,我们可以在SystemService中看到main函数,然后一直走到创建WifiService:main() -> run() -> startOtherService() -> startService(WIFI_SERVICE_CLASS)。
WifiService实际就是个简单的包装类,真正的实现都是由WifiServiceImpl类来实现,并且发布到ServiceManager中的也是WifiServiceImpl类,所以上面WifiManager中持有的是WifiServiceImpl,对Wifi的调用也都是走到的WifiServiceImpl。
WifiServiceImpl
上面说到了WifiManager暴露出来的所有关于wifi的操作都是由WifiServiceImpl实现的,这里我们先看一下他们的通信方式,第一种是是远程服务的直接调用,跟平时使用AIDL是一样的。
第二种是通过AsyncChannel的方式,这种方式可以很方便的实现跨进程互相调用。
上面的Message会发送到WifiServiceImpl,而WifiServiceImpl处理好又会回调到WifiManager。
上面的回调的消息会在WifiManager的内部类ServiceHandler中收到并处理。
WifiServiceImpl对Wifi的操作,主要是通过WifiController实现,WifiController是一个状态机(TODO状态改变怎么发送到底层)。
以上是关于Android网络框架的主要内容,如果未能解决你的问题,请参考以下文章