AIDL的理解
来源:互联网 发布:b站电视剧被下架 知乎 编辑:程序博客网 时间:2024/06/06 20:28
AIDL是跨进程通信的接口,考虑多客户端访问服务并发情况,它本身并不会去实现方法,是两个进程约定的一套接口。
以服务-应用的角度来比较好理解。普通服务是在同一个进程的通讯,窗口Activity要去获取服务Service,服务要提供一个binder来连接。
通进程普通服务
Service
Intent intent = new Intent("android.com.service.MService");public IBinder onBind(Intent intent) { return mBinder;}
Activity
bindService(intent, mServiceConnect, Service.BIND_AUTO_CREATE);private ServiceConnection mServiceConnect = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = (MBinder) service; } .........}
Activity Service
onServiceConnected <======== onBind
Activity发起意图,我需要MService服务,通过bindService绑定Mservice, MService服务执行对应的onBind,经过一系列binder处理,Activity获取服务的联系方式mBinder,双发建立通信。
AIDL跨进程服务
参考例子
http://blog.csdn.net/liuhe688/article/details/6400385
Service:
Stub继承的是Binder,本身是一个抽象类,我理解Stub类似interface,自己并不实现方法,实现一个连接方法onBind
IPerson.Stub stub = new IPerson.Stub() { @Override public IBinder onBind(Intent intent) { return stub; }
也有这样写法,参考InputManagerService.java写法
MService extends IPerson.Stub { @Override ......}
AIDL:
这部分由eclipse生成。提供asInterface就是返回Stub本身。
public Stub() { this.attachInterface(this, DESCRIPTOR); } public static com.scott.aidl.IPerson asInterface(android.os.IBinder obj) { if ((obj == null)) { return null; } android.os.IInterface iin = (android.os.IInterface) obj.queryLocalInterface(DESCRIPTOR); if (((iin != null) && (iin instanceof com.scott.aidl.IPerson))) { return ((com.scott.aidl.IPerson) iin); } return new com.scott.aidl.IPerson.Stub.Proxy(obj); }Activity:
Intent intent = new Intent("android.intent.action.MService"); bindService(intent, mServiceConnect, Service.BIND_AUTO_CREATE);private ServiceConnection mServiceConnect = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = IPerson.Stub.asInterface(service);; } .........}Activity AIDL Service
onServiceConnected <== asInterface <=== onBind
Activity发起意图,我要启动MService,跨进程没办法直接联系上MService,Activity找到AIDL,AIDL本身自己是Interface没办法自己实现,AIDL就去找真正干活的MService,间接联系上MService,双方建立通信。
AIDL提供了一个双方约定的接口,Service提供实现方式,Activity调用AIDL interface,AIDL interface找到Service。
- AIDL的一点理解
- AIDL的一点理解
- AIDL的理解
- AIDL的理解
- 对AIDL的理解
- 关于aidl的理解
- Android AIDL的重新理解
- android aidl接口的理解
- AIDL的理解与使用
- AIDL 的理解&源码分析
- aidl理解
- AIDL 理解
- aidl理解
- AIDL的android:process的理解
- Android AIDL的理解和使用
- Android 中AIDL的使用与理解
- 菜鸟对使用AIDL的一点理解
- Android 中AIDL的使用与理解
- 收藏一个Yaf教程
- Java NIO系列教程(九) ServerSocketChannel
- 人脸关键点标识参考
- 【swift基础】06字典
- Unity渲染路径 Rendering Paths_1_Deferred Lighting 延时光照
- AIDL的理解
- 备忘录模式
- like '%%'
- 获取mac地址
- Maven学习记录(二)--Maven核心概念
- 【swift基础】07函数
- android实现截屏操作
- 求裴波那契数列的第n项---递归+改进
- LTS任务调度使用