Aidl机制提供进程间传递对象。
当然在进程间传递对象也可以使用广播吧,但他们的使用方向是不一样的,大概如此。
实现Android进程间传递对象的步骤如下:
1.编写aidl接口。
TestService.aidl
package com.xwangly.service;
interface TestService {
/**
* 获取人员列表
* @param sex
* @return
*/
List getPersonList(in String sex);
/**
* 查询人员姓名
* @param id
* @return
*/
String getPersonName(int id);
/**
* 查询人员ID
* @param name
* @return
*/
int getPersonId(in String name);
/**
* 显示人员信息
* @param name
*/
void showPersonInfo(out List personList);
}
aidl中的参数有in或out。当然out也可以使用返回值的形式,如getPersonName函数。
2.编写远程服务。远程服务类就是普通的Android服务。不过该服务的onBind方法要返回一个TestService.Stub对象。一般在该服务中需要实现该类并创建对象。
com.xwangly.service.RemoteService.java
package com.xwangly.service;
import java.util.ArrayList;
import java.util.List;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
public class RemoteService extends Service {
private final String TAG = "RemoteService";
public TestService.Stub aidl = new TestService.Stub(){
public int getPersonId(String name) throws RemoteException {
// TODO Auto-generated method stub
return name=="wang"?1:2;
}
public String getPersonName(int id) throws RemoteException {
// TODO Auto-generated method stub
return "wang "+id;
}
public void showPersonInfo(List personList) throws RemoteException {
// TODO Auto-generated method stub
personList.add("wang");
personList.add("xiao");
}
public List getPersonList(String sex)
throws RemoteException {
// TODO Auto-generated method stub
//personList = new ArrayList();
List personList = new ArrayList();
personList.add("wang "+sex);
return personList;
}
};
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i(TAG, intent.getAction());
return aidl;
}
}
在manifest中配置如下:
<service android:name="RemoteService">
<intent-filter>
<action android:name="com.xwangly.service.TestService" />
</intent-filter>
</service>
3.客户端连接远程服务,得到aidl接口的一个实例,通过该实例,客户端可以像本地服务一样使用该服务。(客户端即为另一应用。)
首先客户端需要实现一个服务连接器serviceConnection,在该接口的onServiceConnected中实现创建服务接口,代码如下:
tService = TestService.Stub.asInterface(service);
然后客户端需要bindService
Intent intent = new Intent("com.xwangly.service.TestService");
bindService(intent, connect, BIND_AUTO_CREATE);
Intent的action即为服务端aidl文件的类全名。需要在服务端的manifest中配置相应的action过滤。如第二步中的manifest配置所示。
connect即为刚实现的serviceConnection实例。
这样客户端就可以使用tService对象了。
分享到:
相关推荐
AIDL(Android Interface Definition Language)就是Android提供的一种机制,它使得不同进程间的对象能够相互调用方法,实现了跨进程的数据交换和功能调用。本文将详细介绍AIDL的工作原理、使用步骤以及相关知识点。...
3. **实现服务端**:在WPS应用中,你需要实现`IMOfficeService`接口,并注册到Android系统的Binder机制中。这样,你的服务就能接收并处理来自其他应用的请求。 4. **实现客户端**:在第三方应用中,你需要创建一个`...
Android Aidl(Android Interface Definition Language)是Android提供的一种强大的IPC机制,它允许两个不同进程之间的服务进行接口调用,实现了类似远程方法调用(RPC,Remote Procedure Call)的效果。下面将详细...
在Android系统中,服务间的通信是通过Binder机制实现的,它是Android系统中进程间通信(IPC)的核心组件。Binder框架允许不同进程间的对象互相调用方法,使得数据和操作可以在不同的应用程序或系统组件之间共享。本...
在Android开发中,AIDL(Android Interface Definition Language)是一种用于进程间通信(Inter-Process Communication, IPC)的工具,使得不同应用之间的服务可以共享数据和功能。本示例"android AidlDemo(简单aidl...
Android AIDL(Android Interface Definition Language)是Android系统中用于实现进程间通信(IPC,Inter-Process Communication)的一种机制。在Android应用开发中,当需要在不同进程之间共享数据或调用服务时,...
在Android应用开发中,AIDL(Android Interface Definition Language)是一种强大的工具,用于实现跨进程通信(IPC,Inter-Process Communication)。当我们需要在一个Activity中调用另一个进程中服务的方法时,AIDL...
在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(IPC, Inter-Process Communication)的工具。本教程将详细讲解如何在Android Studio中创建并使用AIDL,以便不同进程间的...
5. 数据传输:由于Android的IPC机制,跨进程的数据传输需要序列化。AIDL支持的基本数据类型、Parcelable和Serializable对象都会被自动序列化。如果需要传输自定义对象,记得实现Parcelable或Serializable接口。 ...
在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于实现不同进程间的通信,即远程进程通讯。AIDL使得服务(Service)和活动(Activity)这两个独立的APK之间能够相互通信,...
在Android系统中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信...通过这个例子,开发者可以更深入地理解Android进程间通信的机制,这对于构建需要跨越进程边界交互的复杂应用至关重要。
Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理进程间通信(IPC, Inter-Process Communication)。在Android应用开发中,当需要在不同进程间共享数据或者...
由于进程间的数据传递需要通过Binder机制,所有参数和返回值都必须是Android支持的序列化类型,如基本类型、String、Parcelable或Serializable。如果需要传递自定义对象,那么该类需要实现`Parcelable`或`...
非`oneway`方法则需要在服务端处理完后回调客户端,这涉及到AIDL的序列化和反序列化机制,确保数据在进程间安全传输。 在这个Demo中,客户端和服务端的代码结构清晰,便于理解AIDL的工作流程。通过实际操作,开发者...
1. **服务端**:服务端实现AIDL定义的接口,并注册服务到Binder系统服务,这样其他应用就可以通过Binder机制找到并调用服务的方法。 2. **客户端**:客户端通过调用`bindService()`方法连接到服务,并获取到由AIDL...
描述“android aidl跨进程通信例子,简单明了”提示我们,这个压缩包可能包含了一个简单的AIDL使用示例,帮助开发者理解如何实施这一机制。通常,一个简单的AIDL示例会包括以下步骤: 1. **定义接口**:首先,你...
Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理不同进程间的通信(IPC: Interprocess Communication)。在Android应用开发中,当需要在不同的应用程序组件...
在Android开发中,AIDL(Android Interface Definition Language)是一种用于跨进程通信(IPC,Inter-Process Communication)的机制,使得应用程序的不同组件之间可以相互通信,即使它们运行在不同的进程中。...
**Android AIDL(Android Interface Definition Language)** 是Android系统中用于进程间通信(Inter-Process Communication, IPC)的一种机制。AIDL允许不同Android进程中的组件相互通信,即便它们运行在不同的应用...