IPC机制——进程间数据交换

1.IBinder是远程对象的基本接口,该接口描述了与远程对象交互的抽象协议,是为高效率进行进程间通讯设计的轻量级远程过程调用机制的核心。通常并不直接实现该接口,而是继承自Binder父类,一个继承了Binder的类,它的对象就可以被远程的进程使用了(前提是远程进程获取了这个类的对象【对象的引用】(若一个Service中有一个继承了Stub的类的对象,那么这个对象中的方法就可以在Activity中使用);
2.当需要在一个类中有多个Stub对象,它们都要给远程交互的类的实例,这个时候可以考虑使用RemoteCallbackList<>
(docs/reference/android/os/RemoteCallbackList.html)。

android业务交换方式 安卓手机数据交换_android业务交换方式


        为了解决进程间数据共享的问题。需要通过把对象拆分成操作系统能理解的简单形式,伪装成本地对象进行跨界访问,为此就需要跨进程通信的双方约定一个统一的接口。由于编写这种接口的方法具有很大的共性,Android提供了AIDL工具来辅助完成接口的编写工作。

        AIDL(Android Interface Definition Language,即Android接口描述语言)属于IDL语言的一种,借助它可以快速地生成接口代码,使得在同一个Android设备上运行的两个进程之间可以通过内部通信进程进行交互。如果需要在一个进程中(假设为一个Activity)访问另一个进程中(假设为一个Service)某个对象的方法,就可以使用AIDL来生成接口代码并传递各种参数。

         AIDL语法与Java接口非常类似,但定义接口的源代码必需以.aidl为结尾。开发人员定义的AIDL接口仅定义了进程之间的通信接口,Service端、客户端都需要使用Android SDK安装目录下的platform-tools子目录下的aidl.exe为该接口提供实现。若采用ADT工具进行开发,则ADT工具会自动为该AIDL接口生成实现。

        AIDL(Android Interface Description Language)弥补了IBinder接口单一的缺点。ADT会根据这个描述文件自动生成一个底层基于IBinder机制,表层提供描述文件所定义方法的接口类。