ITelephony.adil:
是一个接口,定义了方法,操作的数据是基本数据类型
interface ITelephony {
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
void method();
}
ITelephony.java :
会由IDE自动生成的java文件.
ITelephony接口:继承了系统的IInterface接口
public interface ITelephony extends android.os.IInterface
{....}
IInterface 接口:
public interface IInterface
{
public IBinder asBinder();
}
Stub抽象内部类(在ITelephony接口中):继承了Binder和ITelephony接口
public static abstract class Stub extends android.os.Binder implements com.android.internal.telephony.ITelephony{
asBinder() //return this; !!!
asInterface(android.os.IBinder obj) //创建了一个new Proxy (obj)并返回 !!!!
}
Proxy代理类(在Stub中):持有Stub,并实现了ITelephony接口,通过它(代理类)调用Stub对象的方法。
private static class Proxy implements com.android.internal.telephony.ITelephony
{
private android.os.IBinder mRemote;
Proxy(android.os.IBinder remote)
{
mRemote = remote;
//
}
asBinder() //return mRemote;
}
服务端:
在实现的Service子类中 : 返回一个继承Binder,实现AIDL接口的Stub对象
@Override
public IBinder onBind(Intent intent) {
return new ITelephony.Stub() {...实现方法...};
}
客户端: 将mBinder(由服务端创建返回)转换成一个AIDL的接口对象(代理类对象)。
ITelephony telephonyService = ITelephony.Stub.asInterface(mBinder);
ActivityManager:
IUsageStats usageStatsService = IUsageStats.Stub.asInterface(
ServiceManager.getService("usagestats")
TelephonyManager:
ITelephonyRegistry.Stub.asInterface (ServiceManager.getService(
"telephony.registry")
DevicePolicyManager:
IDevicePolicyManager.Stub.asInterface(
ServiceManager.getService(device_policy)