Android 开发文档 程序基础—Remote procedure calls远程过程调用
2010-07-01 14:57:00 来源:WEB开发网android有一个针对远程程序调用(RPCs,方法在本地被调用,运行在远程,也就是另一个进程,然后将结果返回给调用者)的轻量级机制。android已经搞定了相关的代码,你只要用现成的就可以了。
RPC接口只能包括方法。默认的情况下,所有的方法同步运行,本地方法会停止直到远程方法结束,即使没有返回数据。
简单的来说,这个机制运作如下:开始于声明你想执行的使用简单IDL的RPC接口(这句的结构也太tmd的太BT了,译者buhutuu.cn)。从这个声明中aidl工具生成一个必须对本地和运程进程都有效的java接口定义。这包括两个内部的类,如下图所示:
binder_rpc
这两个内部类有所有用来为你用IDL声明的接口管理远程程序调用的代码。这两个类都执行了IBinder接口。其中的一个由系统本地和内部使用,你可以写代码忽视它。另一个stub,扩展了Binder类。除了实现IPCs调用的内部代码之外,它还包括你声明的RPC接口中的方法的声明。你需要Stub的子类来执行其中的方法,正如图表中所说。
一般来说,远程进程是由service管理,因为service可以通知系统有关进程和进程与其他进程连接 的信息。它会同时拥有aidl生成的接口文件和执行RPC方法的Stub子类。service的客户端则只有aidl工具生成的接口文件。
service和客户端连接的方式如下:
处于本地的service的客户端会执行onServiceConnected()和onServiceDisconnected()方法,这样就可以在远程连接成功确认之后得到通知。然后再调用bindService()方法设计连接。
service的onBind()方法会被执行以接受或者拒绝连接,取决于它接收到的intent。如果被接受,会返回一个Stub子类的实例。
如果service接受了连接,Android调用客户端的onServiceConnected()方法,并传递给一个IBinder对象(由service管理的Stub子类的代理)。通过代理,客户端可以生成对远程服务的调用。
原文
Remote procedure calls
Android has a lightweight mechanism for remote procedure calls (RPCs) — where a method is called locally, but executed remotely (in another process), with any result returned back to the caller. This entails decomposing the method
更多精彩
赞助商链接