`
xwangly
  • 浏览: 132084 次
  • 性别: Icon_minigender_1
  • 来自: 鄂州
社区版块
存档分类
最新评论

Android Aidl机制

阅读更多
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对象了。
分享到:
评论
1 楼 yelinsen05 2011-06-07  
aidl只是对BN BP的一种封装格式!建议看binder的源代码会比较清晰结构一点!

相关推荐

    AndroidAIDL

    AIDL(Android Interface Definition Language)就是Android提供的一种机制,它使得不同进程间的对象能够相互调用方法,实现了跨进程的数据交换和功能调用。本文将详细介绍AIDL的工作原理、使用步骤以及相关知识点。...

    wps for android AIDL调用

    3. **实现服务端**:在WPS应用中,你需要实现`IMOfficeService`接口,并注册到Android系统的Binder机制中。这样,你的服务就能接收并处理来自其他应用的请求。 4. **实现客户端**:在第三方应用中,你需要创建一个`...

    android aidl 不同进程间通信

    Android Aidl(Android Interface Definition Language)是Android提供的一种强大的IPC机制,它允许两个不同进程之间的服务进行接口调用,实现了类似远程方法调用(RPC,Remote Procedure Call)的效果。下面将详细...

    Android aidl Binder框架浅析

    在Android系统中,服务间的通信是通过Binder机制实现的,它是Android系统中进程间通信(IPC)的核心组件。Binder框架允许不同进程间的对象互相调用方法,使得数据和操作可以在不同的应用程序或系统组件之间共享。本...

    android AidlDemo(简单aidl的例子)

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于进程间通信(Inter-Process Communication, IPC)的工具,使得不同应用之间的服务可以共享数据和功能。本示例"android AidlDemo(简单aidl...

    android AIDL 完整DEMO

    Android AIDL(Android Interface Definition Language)是Android系统中用于实现进程间通信(IPC,Inter-Process Communication)的一种机制。在Android应用开发中,当需要在不同进程之间共享数据或调用服务时,...

    android aidl 复杂数据类型 传图片

    在Android应用开发中,AIDL(Android Interface Definition Language)是一种强大的工具,用于实现跨进程通信(IPC,Inter-Process Communication)。当我们需要在一个Activity中调用另一个进程中服务的方法时,AIDL...

    Android AIDL demo (Android Studio)

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(IPC, Inter-Process Communication)的工具。本教程将详细讲解如何在Android Studio中创建并使用AIDL,以便不同进程间的...

    android aidl dome下载

    5. 数据传输:由于Android的IPC机制,跨进程的数据传输需要序列化。AIDL支持的基本数据类型、Parcelable和Serializable对象都会被自动序列化。如果需要传输自定义对象,记得实现Parcelable或Serializable接口。 ...

    Android Aidl

    在Android系统中,AIDL(Android Interface Definition Language)是一种接口定义语言,用于实现不同进程间的通信,即远程进程通讯。AIDL使得服务(Service)和活动(Activity)这两个独立的APK之间能够相互通信,...

    Android AIDL使用例子

    在Android系统中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信...通过这个例子,开发者可以更深入地理解Android进程间通信的机制,这对于构建需要跨越进程边界交互的复杂应用至关重要。

    android AIDL demo讲解

    Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理进程间通信(IPC, Inter-Process Communication)。在Android应用开发中,当需要在不同进程间共享数据或者...

    Android aidl 实现进程间通信

    由于进程间的数据传递需要通过Binder机制,所有参数和返回值都必须是Android支持的序列化类型,如基本类型、String、Parcelable或Serializable。如果需要传递自定义对象,那么该类需要实现`Parcelable`或`...

    Android AIDL 一个完整的Demo(包括服务端客户端2个工程)

    非`oneway`方法则需要在服务端处理完后回调客户端,这涉及到AIDL的序列化和反序列化机制,确保数据在进程间安全传输。 在这个Demo中,客户端和服务端的代码结构清晰,便于理解AIDL的工作流程。通过实际操作,开发者...

    Android AIDL示例代码.zip

    1. **服务端**:服务端实现AIDL定义的接口,并注册服务到Binder系统服务,这样其他应用就可以通过Binder机制找到并调用服务的方法。 2. **客户端**:客户端通过调用`bindService()`方法连接到服务,并获取到由AIDL...

    android aidl跨进程通信

    描述“android aidl跨进程通信例子,简单明了”提示我们,这个压缩包可能包含了一个简单的AIDL使用示例,帮助开发者理解如何实施这一机制。通常,一个简单的AIDL示例会包括以下步骤: 1. **定义接口**:首先,你...

    Android AIDL使用详解

    Android AIDL(Android Interface Definition Language)是Android系统提供的一种接口定义语言,用于处理不同进程间的通信(IPC: Interprocess Communication)。在Android应用开发中,当需要在不同的应用程序组件...

    android aidl源码实例

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于跨进程通信(IPC,Inter-Process Communication)的机制,使得应用程序的不同组件之间可以相互通信,即使它们运行在不同的进程中。...

    Android AIDL

    **Android AIDL(Android Interface Definition Language)** 是Android系统中用于进程间通信(Inter-Process Communication, IPC)的一种机制。AIDL允许不同Android进程中的组件相互通信,即便它们运行在不同的应用...

Global site tag (gtag.js) - Google Analytics