1. 安卓的Telephony模块中大量的使用了AIDL,( AIDL(Android Interface Definition Language),即"Android接口定义语言"。是Android中进行进程间通信的一种解决方案,其本质是AndroidBinder机制)。<br /> Telephony模块中,在ITelephony.aidl的文件路径是frameworks/base/telephony/java/com.android.internal.telephony.ITelephony.aidl.这里主要定义了com.android.phone进程中对外提供的telephony 的接口,它的服务端是PhoneInterfaceManager.java,它的文件路径为packages/Telephony/com.phone.PhoneInterfaceManager.java,它继承实现了ITelephony.Stub。<br />通过源码查找分析, 我们知道PhoneInterfaceManagerinit()方法会在PhoneGlobals类的onCreate()方法中被调用。PhoneGlobals的源码路径:packages/Telephony/com.phone.PhoneGlobals.java.而PhoneGlobals的作用是在电话进程中运行时,持有电话子系统的全局状态。它在PhoneApponCreate中被创建。PhoneApp是继承自Application的,当Phone Service 启动时,就会创建PhoneGlobals实例,然后初始化PhoneInterfaceManager,总之就是com.android.phone 系统服务进程启动时,PhoneInterfaceMamager也会初始化。<br /> Itelephony.aidl主要在TelephonyManager(framework/base/telephony/java/android/telephony/TelephonyManager.java)中使用,TelephonyManager绝大多数公共方法,都会先调用
    1. ITelephony telephony = getITelephony();
    1. getITelephony该方法如下:
    1. private ITelephony getITelephony() {
    2. return ITelephony.Stub.asInterface(TelephonyFrameworkInitializer
    3. .getTelephonyServiceManager().getTelephonyServiceRegisterer().get());
    4. }

    所以TelephonyManager是ITelephony的客户端,在第三方应用开发中,通过获取TelephonyManager实例,再调用相关API方法,实现和com.android.phone系统服务进程的通信。
    和ITelephony.aidl一样机制的还有如下:

    AIDL() 实现 文件路径
    ITelephony PhoneInterfaceManager packages/services/Telephony/
    ITelephonyRegistry.aidl TelephonyRegistry.java frameworks/base/services/core/
    IPhoneSubInfo PhoneSubInfoController frameworks/opt/telephony/
    ICarrierConfigLoader CarrierConfigLoader packages/services/Telephony/
    ISub SubscriptionController frameworks/opt/telephony/
    ITelecomService TelecomServiceImpl中的mBinderImpl packages/services/Telecomm/