AIDL 源码窥探

AIDL 源码窥探

639084-20151023162147458-1404826970.png

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);

所有的Manager,都是通过ServiceManager获取到IBinder,然后让所有的Manager包装这个IBinder而成的。而ServiceManager里有两个成员:IServiceManager sServiceManager 和 HashMap<String, IBinder> sCache ,由此可以对IBinder进行添加,获取等操作

  • I开头的都是AIDL文件。
  • 服务端:返回实现的 IBinder 对象,new IAIDL.Stub( ){....}
  • 客户端:对返回的IBinder对象转成代理使用,IAIDL.Stub.asInterface(mIBinder)

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)

转载于:https://www.cnblogs.com/beyondbycyx/p/4904838.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值