android Services AIDL 解析
来源:互联网 发布:java高性能http框架 编辑:程序博客网 时间:2024/06/18 08:09
1、service所在进程,同一个包的属于同一个进程,和startService和bindService没有关系
他们的区别在于startSerivce无参,适用于自管理状态。BindSerivce可以通过onbind返回IBinder对象,然后客户端通过传入的ServiceConnection获取IXXXService获得服务接口,进行IPC调用。
另外一点区别在于bindService与 与其绑定的Activity共存亡,activity结束后,ServiceConnection断开,Service停止
StartService一旦启动后,可以一直存在与调用者没有关系。除非使用stopService或者service端自己调用stopSelf
AIDL生成代码实现原理
根据AIDL文件生成一个接口,接口继承IInterface
内部生成一个静态抽象类Stub,Stub有两个重要方法,asBinder和asInterface
asBinder返回本地Binder对象(接口),asInterface根据传入IBinder决定返回远程接口还是本地接口。
Stub内部还有一个私有远程类Proxy实现了服务端接口功能(真正功能没有实现,只是对于参数打包),远程类对接口的调用参数进行了规范,通过transact进行IPC调用 Stub 重载了onTransact,与远程类写入相同的顺序读取参数,然后调用本地接口实现。
可以这么认为Proxy的代码运行在客户端,而Stub的代码运行在服务端,Proxy接口中的transact方法执行了远程对于服务端的调用,Stub在onTransact方法中进行Parcel参数获取和本地调用
AIDL规定了客户端和服务端Parcel数据读取顺序,以及提供了获取IBinder引用的接口
客户端通过ServiceConnection对象的回调函数,onServiceConntected传入的IBinder对象,获取服务接口,然后进行IPC调用
服务端通过继承AIDL生成的服务接口的抽象类Stub,实现服务接口。通过onBind返回这个Stub(Binder)
- android Services AIDL 解析
- Android:跨进程调用Services(AIDL Service)
- Android AIDL实例解析
- Android AIDL实例解析
- Android AIDL用法解析
- 深刻解析 Android 的 AIDL
- Android之AIDL使用解析
- Android AIDL机制范例解析
- 【Android进阶】-AIDL使用解析
- 【Android API指南】App组件(8) - Services(2) - AIDL
- Android API Guides 之 App Components(9) - Services - AIDL
- Android基本功:跨进程调用Services(AIDL Service)
- Android 通过AIDL远程调用services(绑定)
- 深刻解析 Android 的 AIDL 介面
- 深刻解析 Android 的 AIDL 介面
- 深刻解析 Android 的 AIDL 介面
- Android中aidl的解析和使用
- Android IPC之AIDL使用解析
- jquery easyUI
- SQL分页语句
- 想你,但不爱你
- 关注SQL Server 2008 R2的七大理由
- POJ 3084 最大流
- android Services AIDL 解析
- js获取本机MAC地址
- 借我一生
- 报错:java.lang.NoSuchMethodException: com.....action,java.lang.Class.getMethod()
- 关于青春
- SQL Server 2012 的12个激动人心的功能
- java基础面试题122道
- 使用BeanPostProcessor接口对受管Bean进行预处理
- 浅谈for循环嵌套的效率