Android AIDL分析
来源:互联网 发布:大数据十三五规划 编辑:程序博客网 时间:2024/05/16 06:00
1. AIDL接口
对于WindowManagerService,如果client需要访问它,需要通过AIDL接口来访问,其接口在IWindowManager.aidl中定义,ADIL接口在编译时将生成一个IWindowManager.java文件(此文件在out目录下),其主要相关代码如下:
/** * System private interface to the window manager service. * * {@hide} */ public interface IWindowManager extends android.os.IInterface{ ... public static abstract class Stub extends android.os.Binder implements android.view.IWindowManager { ... /** * Cast an IBinder object into an android.view.IWindowManager interface, * generating a proxy if needed. */ public static android.view.IWindowManager 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 android.view.IWindowManager))) { return ((android.view.IWindowManager)iin); } return new android.view.IWindowManager.Stub.Proxy(obj); } //end asInterface .... private static class Proxy implements android.view.IWindowManager { private android.os.IBinder mRemote; Proxy(android.os.IBinder remote) { mRemote = remote; } public android.os.IBinder asBinder() { return mRemote; } ... public android.view.IWindowSession openSession(com.android.internal.view.IInputMethodClient client, com.android.internal.view.IInputContext inputContext) throws android.os.RemoteException { android.os.Parcel _data = android.os.Parcel.obtain(); android.os.Parcel _reply = android.os.Parcel.obtain(); android.view.IWindowSession _result; try { _data.writeInterfaceToken(DESCRIPTOR); _data.writeStrongBinder((((client!=null))?(client.asBinder()):(null))); _data.writeStrongBinder((((inputContext!=null))?(inputContext.asBinder()):(null))); mRemote.transact(Stub.TRANSACTION_openSession, _data, _reply, 0); _reply.readException(); _result = android.view.IWindowSession.Stub.asInterface(_reply.readStrongBinder()); } finally { _reply.recycle(); _data.recycle(); } return _result; } // end openSession ... } // end Proxy }//end Stub ...}
由上代码可知, 它总共定义了以下三个类:
1) IWindowManager
2) IWindowManager.Stub
3) IWindowManager.Stub.Proxy
2. 在服务器端:
WindowManagerService负责实现服务,它的定义如下:
public class WindowManagerService extends IWindowManager.Stub implements Watchdog.Monitor, WindowManagerPolicy.WindowManagerFuncs
很显然,它实现了Stub中定义的方法。
3. 在Client端:
当获取服务时,通过调用以下函数:
IWindowManager.Stub.asInterface(ServiceManager.getService("window"))
返回IWindowManager.Stub.Proxy,从上面的代码可知,它就是我们熟悉的BpBinder所做的事,只是通过aidl的方式简化的代码的开发,代码由编译时自动生成。
4. AIDL工作流程
- Android AIDL分析
- Android AIDL分析
- Android AIDL源码分析
- Android AIDL分析
- android aidl文件分析
- Android AIDL简单分析
- Android AIDL分析例子源码
- Android AIDL 分析 例子 源码
- Android AIDL分析例子源码
- Android AIDL 分析 例子 源码
- Android AIDL 分析 例子 源码
- 【Android】深入分析AIDL原理
- Android AIDL proxy/stub 分析
- Android中AIDL详细分析
- android中AIDL机制分析
- android AIDL IPC深入分析
- Android AIDL和Binder 简单分析
- Android aidl 案例分析Binder机制
- 删除mysql方法
- 使用ContactsContract API
- Web申请个人证书代码
- Little Elephant and Strings CF204E 注意何时线段树update()
- Oracle pl/sql 常用sql__修订版
- Android AIDL分析
- JSP知识点总结
- Spring整合Activiti5.10完成一个简单的请假流程
- Linux下真机调试Android手机
- 返回值是函数指针的函数使用方法
- APUE课后练习3.2
- git学习笔记
- hibernate的缓存
- 关于java应用程序打成jar包问题