android的wifi模块中AIDL的通讯

  android系统中的wifi的前端显示在应用Settings中设计的(pakages/apps/Settings),在wifi的开启,关闭,扫描都需要后台的WifiService类来提供服务,Settings跟WifiService是运行在两个不同进程的程序,所以就需要到了AIDL(Android interface definiton lanugage)来实现进程间的通信,当然实现进程通信还有别的方式,比如广播,意图,还有文件,但考虑到实际需求   要用前台Settings要实时的显示后台WifiService的状态,还是用AIDL合适

 

   在系统启动的时候,会启动一系列的服务,其中就有WifiService。

 

   现在分析启动wifi的这个过程的AIDL通讯

 

   在Settings应用中用WifiEnabler.java这个类来封装了,wifi的启动和关闭还有wifi状态的转换及显示  。在WifiEnable.java中点击CheckBox,会执行onPreferenceChange(),在该方法里执行mWifiManager.setWifiEnabled(enable)  在WifiManager.setWifiEnabled()中执行mService.setWifiEnabled()    ,mService为AIDL通信接口的实例,是一个WifiService的实例,可以通过它调用WifiService服务的内定义的方法。

   mService是在取得WifiManager实例过程中调用ContextIpl.java类的getWifiManager()得到的   

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

 

 

   写道

private WifiManager getWifiManager()
{
synchronized (sSync) {
if (sWifiManager == null) {
IBinder b = ServiceManager.getService(WIFI_SERVICE);
IWifiManager service = IWifiManager.Stub.asInterface(b);
sWifiManager = new WifiManager(service, mMainThread.getHandler());
}
}
return sWifiManager;
}

 

 

在WifiManeger的构造函数中,传递到WifiManger

 

 

 

 

 

你可能感兴趣的:(android)