Aidl调用何时使用本地对象问题

今天系统需要采用aidl进行跨进程调用,讨论到了aidl对象调用效率问题,总结如下

1. 同一个apk,同一个进程的Activity 调用Service,系统会直接把binder这个java对象传递给Activity,会一般的回调无异

源码

/**
 * Cast an IBinder object into an com.example.testaidlservice.IMyAidlInterface interface,
 * generating a proxy if needed.
 */
        public static com.example.testaidlservice.IMyAidlInterface asInterface(android.os.IBinder obj) {
            if ((obj == null)) {
                return null;
            }
            android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
            if (((iin != null) && (iin instanceof com.example.testaidlservice.IMyAidlInterface))) {
                return ((com.example.testaidlservice.IMyAidlInterface) iin);
            }
            return new com.example.testaidlservice.IMyAidlInterface.Stub.Proxy(obj);
        }

 

 

2. 同一个Apk,Activity 指定process a, Service process 为b, Activity aidl调用Service,当然需要进行序列化反序列化,需要创建一次对象

 

 

3.不同apk, Activity 调用另一个Apk的Service, 系统需要对Service的binder对象序列化,在
Client端进行反序列化

 

4. 不同Apk , share uid不同, process相同, 实际上还是两个进程,当然也需要binder的序列化反序列化


 

5. 不同Apk, shareuid 相同, process相同,实际上是一个进程,但是aidl调用,仍然需要 进行序列化反序列化, 在客户端创建对象

 

 

 

结论:

1.Android 为了提高aidl的效率, 对于同一个apk内,同一个进程内的aidl调用,直接转递了java对象,其他情况,需要对对象进行一次序列化和反序列化,性能比前者低

2.只有在shareuid process 都相同的情况下,组件占用的进程才相同。 更多请参考 http://www.cnblogs.com/gansc23/archive/2011/01/21/1941134.html

转载于:https://my.oschina.net/sfshine/blog/903164

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值