本例和下个例子Remote Service Controller 涉及到的文件有RemoteService.java ,IRemoteService.aidl, IRemoteServiceCallback.aidl 及ISecondary.aidl。
Android Interface Definition Language(AIDL)和其它一些支 持远程方法调用RMI的系统的IDL类似,它定义了Service和Client 之间的使用接口约定,这种远程调用一般需要通过进程间通信 机制(IPC)来实现。在Android系统,一个进程(Process)通常不能直接访问其它进程的内存空间,Android系统支持使用AIDL来 实现使用不同进程间调用服务接口。
在设计AIDL接口之前,要意识到使用AIDL接口是通过直接函数调用的方法来进行的 ,但这种远程调用所发生的线程Thread随调用者是否和Service提供者属于同一进程Process的不同而不同:
如 果调用者与Service属于同一个进程(可以称为Local Process),那么AIDL Call将使用与调用者同一线程执行。因此如果你的 应用只使用Local Process来访问AIDL Call,那么根本就无必要使用AIDL接口,使用Binder即可,参见Android ApiDemo示例解 析(39):App->Service->Local Service Binding。
如果使用Remote Process方式来调用AIDL ,Android 将会使用由本进程管理的线程池(Thread pool)来分发函数调用。因此你的Service需要能够处理多进程触发的AIDL Call,换句 话来说,AIDL接口的实现必须是Thread-safe的。
关键字oneway 可以修改远程调用的的行为,当使用oneway关 键字时,remote call调用后立即返回,有点类似异步调用。
定义AIDL 接口的步骤如下:
AIDL接口定 义使用Java Interface语法定义在 .aidl文件中,然后必须同时放在Service和Client 的 src目录下。 当使用Eclipse 编译时 ,Android SDK工具会根据 .aidl的接口定义自动生成对应的IBinder接口定义 (定义在gen目录下) Service必须实现由这个 IBinder接口定义。 Client然后可以通过绑定Service来访问这些方法。
1. 创建. aidl 文件
AIDL接口定义使用 和Java Interface定义同样的语法,每个.aidl文件只能定义一个调用接口,而且只能定义接口方法,不能含有静态变量定义。 AIDL缺省支持 int ,long, char, boolean, String, CharSequence, List ,Map 变量类型,也可以引用其它 .aidl中定义的类 型。
下面是IRemoteService.aidl 的定义,
package com.example.android.apis.app; import com.example.android.apis.app.IRemoteServiceCallback; /** * Example of defining an interface for calling on to a remote service * (running in another process). */ interface IRemoteService { /** * Often you want to allow a service to call back to its clients. * This shows how to do so, by registering a callback interface with * the service. */ void registerCallback(IRemoteServiceCallback cb); /** * Remove a previously registered callback interface. */ void unregisterCallback(IRemoteServiceCallback cb);<br /> }
编译时,Android SDK 工具自动在gen目录下生成对应的 IRemoteService.java。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, android service
, 接口
, android + service
, aidl
, 进程
, service
, android callback
, app接口
, aidl文件定义
, app接口安全
, app接口天气android
, AIDL详解
AIDL进程间通信
android studio、android官网、android sdk、android开发、android sdk下载,以便于您获取更多的相关知识。